2017-04-20 58 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

相关问题