我尝试使用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
请注意,我无法添加带触发器的时间戳,因为该表由第三方管理。
答案 0 :(得分:0)
我认为将列连接在一起是您最好的选择,您可能希望使用一些隐蔽的标记来获取相同格式的所有内容。
SELECT CompanyCode + CONVERT(VARCHAR(50),CompanyNumber) + CompanyDescription + CompanyAddress
+ CONVERT(VARCHAR(50), EffectiveDate)
FROM your_table
这将为您提供您想要的所有信息作为单个字符串。我想当你想要散列表时,你可以使用查询代替散列函数中的coulmn名称:
HASHBYTES('SHA2_256',<above query>)
在HAHBYTES前放置一个SELECT来测试并确保它有效。我不得不用SHA1进行测试,但是让它工作了。
SELECT HASHBYTES('SHA2_256','<above query>')