如何为多列创建哈希计算列?

3 database-design sql-server sql-server-2016 computed-column

有谁知道如何创建一个哈希计算列持久化?我不断收到以下错误。否则,我将不得不每次都使用更新或触发语句。我知道如何进行单列,但是现在这包括多列。

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.
Run Code Online (Sandbox Code Playgroud)

Jon*_*ite 7

只需将您的列连接在一起,而不是尝试将它们转换为 xml,然后再转换为哈希。

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', CONCAT(    UPPER(COALESCE(CustomerName, '')), '|'
                                                , COALESCE(CONVERT(VARCHAR(50), Price), ''), '|'
                                                , COALESCE(CONVERT(VARCHAR(20), Quantity), ''), '|'
                                                )) persisted
) 
Run Code Online (Sandbox Code Playgroud)

注意:合并和管道字符仅用于示例。如果您希望哈希区分大小写,则 Upper 是可选的。