迭代列中的每一行并更新

时间:2014-02-26 03:19:09

标签: sql sql-server

我的sql server表列名为“Subject。”。

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

上面的查询在主题列中散列整行......

0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE599A

主题列中的每个记录的输出行值都相同。

我需要读取每一行并对其进行散列并更新而不是基于coloumn的散列。我怎样才能做到这一点。

0x0431A163506AE958501A2AA30FA12513C3CE599A
0x0431A163506AE958501A2AA30FA12513C3CE593D
0x0431A163506AE958501A2AA30FA12513C3CE592F

1 个答案:

答案 0 :(得分: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

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