Sql-Server

如何為多列創建雜湊計算列?

  • January 25, 2022

有誰知道如何創建持久的雜湊計算列?我不斷收到下面的錯誤。否則,我每次都必須使用更新或觸發語句。我知道如何為單列進行,但是現在包括多列。

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) 數據類型,這是不必要的。

引用自:https://dba.stackexchange.com/questions/220837