我想湊使用HashBytes
HASHBYTES計算列不能持久,因爲該列是不確定性
alter table dbo.Events
add HashKey AS hashbytes('MD5', cast(convert(varchar(200), format(datestamp,'yyyy-MM-dd HH:mm:ss.ffffff')) as varbinary)) persisted
的datetime
列,但因爲它是不確定的,我得到這個錯誤:
Computed column cannot be persisted because the column is non-deterministic.
我設法得到它不指定格式按以下步驟進行
alter table dbo.PolicyEventsFromQueue
add HashKey AS hashbytes('MD5', cast(datestamp as varbinary)) persisted
但在SQL Server中,當我看到的格式和無格式我收到了相同的字段值不同的結果的結果:
Select
convert(varchar(200), hashbytes('MD5', cast(convert(varchar(200), format(datestamp, 'yyyy-MM-dd HH:mm:ss.ffffff')) as varbinary)), 1)
From
Events
Where
DateStamp ='2016-06-30 12:19:35.257961'
結果:
0xBE06A33FF10644A6D3B38EA134DDB97A
第二個查詢:
select
hashbytes('MD5', cast('2016-06-30 12:19:35.257961' as varbinary))
結果:
0xBE06A33FF10644A6D3B38EA134DDB97A
第三個查詢:
Select
convert(varchar(200), hashbytes('MD5', cast(DateStamp as varbinary)), 1)
From
Events
Where
DateStamp = '2016-06-30 12:19:35.257961'
結果:
0x3CB5C26B23EB4422515764686DFCAB82
基於以上研究我的理解是將SQL Server轉換郵戳爲另一種格式,然後散列。
但是,當我使用下面的函數獲取相同日期(「2016-06-30 12:19:35.257961」)的C#等效值時,它與散列值(0x3CB5C26B23EB4422515764686DFCAB82
)不匹配。
public static byte[] GetMD5Hash(string input)
{
System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bs = System.Text.Encoding.Unicode.GetBytes(input);
bs = x.ComputeHash(bs);
return bs;
}
任何人能熟知精確匹配日期時間格式,因爲它採取的SQL Server和C#,使其與HashBytes
工作。
注:我需要包括miiliseconds在內的所有日期。這個問題是後續問題。它可能會幫助你理解根本問題。
Need C# equivalent for the below SQL HashBytes function
我得到了解決方案。我修改HashBytes邏輯如下所示,以獲得所需的日期時間格式,並在C#端我使用默認編碼。 )從事件 中選擇hashbytes('MD5',convert(varchar(200),(CONVERT(varchar(10),datestamp,126)+''+ CONVERT(VARCHAR(24),datestamp,114)),2) \t \t \t \t Where DateStamp ='2016-06-30 12:19:35.257961'' –
您應該將答案作爲該問題的答案,並將其標記爲正確的解決方案。 –