2014-02-26 75 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