2017-04-20 55 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%。理想情況下,我希望在表中有一列(可能是一個計算列),就像[文本]列的內容的散列值。哈希是一個從0到9的數字,因此我可以選擇具有此值的所有行。

有什麼方法可以創建像這樣的列?

+1

你有什麼樣的散列函數?如果您要使用Java或C#用於哈希映射的類型,那麼您可能永遠不會得到具有相同哈希的兩行。或者至少在碰撞開始發生之前,您需要一張非常大的桌子。 –

+1

我的意思是你可以做到這一點,例如,你可以做''partCol] AS CHECKSUM([Text])%10 PERSISTED'這理論上應該粗略地將你的表分成10個。但是真的,爲什麼你一次選擇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

相關問題