2016-12-21 31 views
1

我負責實施密碼散列,並且我必須通過編寫SQL腳本來完成所有當前用戶記錄的散列操作。到目前爲止,我已經能夠創建獨特的鹽(從我也問過的另一個問題),但是我試圖實際對它們進行哈希處理時遇到了麻煩。SQL - 更新查詢 - 訪問我在另一個字段中設置的字段的值我正在設置

我的代碼是:

UPDATE 
    user 

SET 
    pass_salt = left(NEWID(), 13) 
    ,user_pwd = convert(varchar(100), HASHBYTES('SHA1', user.user_pwd + user.pass_salt), 2) 

WHERE 
    security_user_id = 98 

我的問題是我真的不知道如何或如果在設置user_pwd我可以訪問pass_salt領域。目前,它只是返回null。

說明:我正在使用SQL Server 2012.我正在使用'where'子句來更改一個記錄以進行測試。

所有幫助表示讚賞。先謝謝你!

回答

0

你可以用一個CTE做到這一點:在update

WITH toupdate as (
     SELECT u.*, left(NEWID(), 13) as new_pass_salt 
     FROM user u 
    ) 
UPDATE toupdate 
    SET pass_sale = new_pass_salt, 
     user_pwd = convert(varchar(100), HASHBYTES('SHA1', user_pwd + new_pass_salt), 2) 
    WHERE security_user_id = 98; 

一般來說,從右邊的=左側來自於「新」記錄的值和值「舊「記錄。

+0

它工作得很好!謝謝! –

相關問題