0

ストアドプロシージャで変数として送信しているテーブルタイプがあります。

CREATE TYPE OperationKeysTableType AS TABLE 
(
    [KeysId] [int] NOT NULL,                
    [OperationId] [int] NOT NULL,                
    [IsChecked] [bit] NOT NULL
)

次に、このテーブルを使用して検索を実行します。一致するかどうか、挿入または削除しますが、次のようにチェックされていない場合に限ります。

MERGE INTO dbo.tblOperationKeys AS T
USING (SELECT VT.KeysId, VT.OperationId as OperationId FROM @ValuesTable AS VT) AS S
ON T.KeysId = S.KeysId AND T.OperationId = S.OperationId
WHEN MATCHED AND S.IsChecked = 0 THEN --DELETE
    DELETE 
WHEN NOT MATCHED THEN--INSERT
    INSERT (KeysId, OperationId) VALUES (S.KeysId, S.OperationId)   
OUTPUT $action AS ChangesMade, inserted.OperationKeysId AS new_OperationKeysId, deleted.OperationKeysId AS old_OperationKeysId;

私の問題は、SQLがIsCheckedが無効であると教えてくれることです。私が間違っていることについて何か考えはありますか?

4

1 に答える 1

0

IsChecked を選択していません。

行で:

USING (SELECT VT.KeysId, VT.OperationId as OperationId FROM @ValuesTable AS VT) AS S

必要なもの:

USING (SELECT VT.KeysId, VT.OperationId as OperationId, VT.IsChecked as IsChecked FROM @ValuesTable AS VT) AS S
于 2013-03-04T16:55:18.733 に答える