Sql-Server
如何為多列創建雜湊計算列?
有誰知道如何創建持久的雜湊計算列?我不斷收到下面的錯誤。否則,我每次都必須使用更新或觸發語句。我知道如何為單列進行,但是現在包括多列。
CREATE TABLE [dbo].[CustomerTransactiont] ( CustomerTransactionId int primary key identity(1,1), CustomerName varchar(255), Price decimal(10,2), Quantity int, RowHash as hashbytes('SHA2_512', (select CustomerName ,Price ,Quantity for xml raw)) persisted ) Msg 1046, Level 15, State 1, Line 7 Subqueries are not allowed in this context. Only scalar expressions are allowed.
只需將您的列連接在一起,而不是嘗試將它們轉換為 xml,然後再轉換為雜湊。
CREATE TABLE [dbo].[CustomerTransactiont] ( CustomerTransactionId int primary key identity(1,1), CustomerName varchar(255), Price decimal(10,2), Quantity int, RowHash as CONVERT(BINARY(64), hashbytes('SHA2_512', CONCAT( UPPER(COALESCE(CustomerName, '')), '|' , COALESCE(CONVERT(VARCHAR(50), Price), ''), '|' , COALESCE(CONVERT(VARCHAR(20), Quantity), ''), '|' ))) persisted )
注意:合併和豎線字元僅用於範例。如果您希望雜湊區分大小寫,Upper 是可選的。
我將 hashbytes 函式的結果轉換為 BINARY(64)
$$ the length of SHA_512 $$. 這要好得多,否則它是 VARBINARY(8000) 數據類型,這是不必要的。