2015-11-02 63 views
-1

我想使用SHA256哈希某些表的列並存儲哈希值。我正在考慮使用HASHBYTES來實現這一點,但函數只能將一個字符串參數作爲散列輸入 - HASHBYTES('SHA2_256', COLUMN_1)。是否可以散列多個列(包括不是字符串的列)?將哈希列添加到表

我想這樣做的原因是,我可以使用散列值識別已更改或添加的行,以便以後在ETL過程中使用。一:我想哈希表中包含這些列:

[CompanyCode] [varchar](4) NULL, 
[CompanyNumber] [int] NULL, 
[CompanyDescription] [varchar](20) NULL, 
[CompanyAddress] [varchar](60) NULL, 
[EffectiveDate] [date] NULL 

注意,由於該表由第三方管理的,我不能觸發加時間戳。

+2

爲什麼不是時間戳。 (Triggers !!!) – jarlh

+0

對不起,我應該澄清,該表由第三方應用程序控制,我無法對其進行修改。我剛剛製作了一份我正在努力的副本。 –

+0

你是什麼意思,你不能修改它?你說你想添加一個新列或者你是否想要創建一個新表來保存哈希字節值? –

回答

0

我認爲將列連接在一起將是你最好的選擇,你可能想用一些隱蔽staements來獲取一切格式。

SELECT CompanyCode + CONVERT(VARCHAR(50),CompanyNumber) + CompanyDescription + CompanyAddress 
+ CONVERT(VARCHAR(50), EffectiveDate) 
FROM your_table 

這會給你所有想要的信息作爲單個字符串。我想,當你想哈希表你也許可以使用查詢來代替coulmn名的散列函數:

HASHBYTES('SHA2_256',<above query>) 

把SELECT在HAHBYTES前進行測試,並確保它的工作原理。我必須使用SHA1進行測試,但是它能夠正常工作。

SELECT HASHBYTES('SHA2_256','<above query>')