2017-04-20 25 views
0

私は、次の表を使用してSQL Serverデータベースを持っている:テーブルに、別の列のハッシュ値である列があり、自動的に計算されますか?

CREATE TABLE [dbo].[Kanji] (
    [KanjiId]    UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text]     NVARCHAR (5)  NOT NULL, 
    [Freq]     INT    NULL, 
    [Grade]    INT    NULL, 
} 

あり、このテーブル内の多数の行があると、私はちょうど10%を選択できるようにしたいと思います。理想的には、[Text]列の内容のハッシュ値のようなものだったテーブル(おそらく計算列)を持っていたいと思います。 0〜9の数値だったハッシュなので、この値を持つすべての行を選択することができました。

このような列を作成できる方法はありますか?

+1

どのような種類のハッシュ関数がありますか? JavaまたはC#がハッシュマップに使用するソートを使用する場合は、同じハッシュを持つ2つの行が決してないことがあります。または、少なくとも衝突が発生する前に非常に大きなテーブルが必要になります。 –

+1

私はあなたがこれを行う方法があることを意味しています。たとえば、理論的にはテーブルを10に分割する必要がある '[partCol] AS CHECKSUM([Text])%10 PERSISTED'のようなことがあります。あなたは一度に10%を選んでいますか?あなたがより良い方法で解決したいかもしれないいくつかの他の問題があるようです。 – ZLK

答えて

1

はこれを試してみてください:

CREATE TABLE [dbo].[Kanji] (
    [KanjiId]    UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text]     NVARCHAR (5)  NOT NULL, 
    [Freq]     INT    NULL, 
    [Grade]    INT    NULL, 
    [Hash] AS (CONVERT([bigint],hashbytes('md5',[Name]))%(5)+(5)), 
} 

次の例のように、9に-9から値を取得します。

+0

これを変更して0と9の間の値を与える方法はありますか?ありがとう – Alan2

+0

@Alanはい、私は答えを編集 – Backs

関連する問題