2014-02-26 46 views
0

我有SQL Server表列名为“主题。迭代THU每行一列,并更新

UPDATE mytable SET SUBJECT=HASHBYTES('SHA1',SUBJECT)from mytable 

上述主题列哈希整个行查询...

0x0431A163506AE958501A2AA30FA12513C3CE599A 
0x0431A163506AE958501A2AA30FA12513C3CE599A 
0x0431A163506AE958501A2AA30FA12513C3CE599A 

输出对于主题列中的每条记录,行值将相同。

我需要读取每一行并对其进行散列和更新,而不是基于颜色的哈希。我该怎么做。

0x0431A163506AE958501A2AA30FA12513C3CE599A 
0x0431A163506AE958501A2AA30FA12513C3CE593D 
0x0431A163506AE958501A2AA30FA12513C3CE592F 
+0

虽然值有所不同吗?如果他们是,你可能需要包含另一个值 - 也许是表的主键? – Stuart

+0

在主题栏..行是不同的...所以可以提供一个查询如何循环throgh每行和散列它......我做了hav主列命名ID .. – user3201733

+0

只是一个想法。什么类型是SUBJECT?请记住,HASHBYTES正在返回一个VARBINARY,并且如果SUBJECT是一个可能导致问题的NVARCHAR。 – Stuart

回答

0

这假定你的主键叫做subjectID。

DECLARE @currentKEY INT 
DECLARE @maxKey INT 

SELECT @currentKey = MIN(subjectID), @maxKey = MAX(subjectID) FROM mytable 

WHILE @currentKey <= @maxKEY 
BEGIN 
    UPDATE myTable 
    SET SUBJECT = HASHBYTES('SHA1', SUBJECT) 
    WHERE subjectID = @currentKEY 

    SELECT @currentKey = MIN(subjectID) FROM mytable WHERE subjectID > @currentKey 
END 

如果你想做它作为游标,我可以告诉你如何做到这一点。

+0

WHERE subjectID = @currentKEY和HASHBYTES('SHA1',SUBJECT)from mytable – user3201733

+0

如何将SUBJECT列的每一行分配给散列输入。 – user3201733

+0

上面更新的代码包含HASHBYTES('SHA1',SUBJECT)。 – Stuart