以下は、テーブルにあるトリガーと、更新に使用しているクエリです。
引き金
このトリガーは、別の列に挿入または更新されたテキストに基づいてタイプ ID 列を更新します...これは、不適切に設計されたテーブルに入力を強制するためのものです
CREATE TRIGGER [dbo].[TypeIDInsert]
ON [dbo].[Table1]
AFTER INSERT, UPDATE
AS
BEGIN
IF (SELECT TypeID FROM inserted) IS NULL
BEGIN
DECLARE @ID [int] = (SELECT ID FROM inserted);
UPDATE Table1 SET TypeID = (
CASE TypeName
WHEN 'Value 1' THEN 1
WHEN 'Value 2' THEN 2
WHEN 'Value 3' THEN 3
ELSE 0
END
)
WHERE ID = @ID
END
END
ID
コラムはコラムIDENTITY
です。
ステートメントの更新
MERGE INTO Table1
USING Table1TypeTable
ON Table1.TypeName= TypeTable.TypeName
WHEN MATCHED THEN
UPDATE SET TypeID = TypeTable.TypeID;
トリガーを有効にすると、次のエラーが表示されます。
サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。
この投稿Update statement error: Subquery returned more than 1 valueを見つけました。これは、テーブルのトリガーが一度に 1 つのレコードに対してのみ設計されていることが問題であることを示しています。トリガーを無効にして、更新を正常に行うことができました。私の質問は、このような一括更新で問題が発生しないようにトリガーを作成する方法です。