web-dev-qa-db-ja.com

多くの列のハッシュ計算列を作成するにはどうすればよいですか?

永続的なハッシュ計算列を作成する方法を知っている人はいますか?以下のエラーが繰り返し表示されます。それ以外の場合は、毎回updateステートメントまたはtriggerステートメントを使用する必要があります。私は単一の列を実行する方法を知っていますが、これには現在複数の列が含まれています。

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.
2
user162241

列を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
) 

注:合体とパイプの文字は単なる例です。ハッシュで大文字と小文字を区別するかどうかを指定する場合、Upperはオプションです。

6
Jonathan Fite