UPDATE - トリガー関数 (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
テーブルまたはビューの指定された列で、INSERT または UPDATE が行われたかどうかを示すブール値を返します。 UPDATE() は Transact-SQL の INSERT または UPDATE トリガーの内部のどこでも使用でき、そのトリガーが特定の動作を実行すべきかどうかをテストすることができます。
構文
UPDATE ( column )
引数
column
INSERT 動作または UPDATE 動作をテストする列の名前です。 トリガーの ON 句にテーブル名が指定されているため、列名の前にテーブル名を含めないでください。 この列のデータ型は、SQL Server がサポートしているものであれば、どのようなデータ型でもかまいません。 ただし、計算列を使用することはできません。
戻り値の型
ブール型
解説
INSERT または UPDATE が成功するかどうかにかかわらず、UPDATE() は TRUE を返します。
複数の列で INSERT 動作または UPDATE 動作をテストするには、最初の UPDATE(column) 句に続けて、別の UPDATE(column) 句を指定します。 COLUMNS_UPDATED を使用しても、複数の列で INSERT 動作または UPDATE 動作をテストできます。 これは、挿入または更新された列を示すビット パターンを返します。
INSERT 動作では、列には明示的な値または暗黙的な (NULL) 値が挿入されるので、IF UPDATE は TRUE の値を返します。
Note
IF UPDATE(column) 句は、IF 句、IF...ELSE 句、または WHILE 句と同じように機能し、BEGIN...END ブロックを使用できます。 詳細については、「フロー制御言語 (Transact-SQL)」を参照してください。
UPDATE(column) は、Transact-SQL トリガーの内部のどこでも使用できます。
トリガーを列に適用すると、列の値が更されない場合でも、UPDATED
値が true
または 1
として返されます。 これは意図されたもので、トリガーでは挿入/更新/削除操作を許容するかどうかを決定するビジネス ロジックを実装する必要があります。
例
次の例では、StateProvinceID
テーブルの PostalCode
列または Address
列を更新しようとするときにクライアントへのメッセージを出力する、トリガーを作成します。
USE AdventureWorks2022;
GO
IF EXISTS (SELECT name FROM sys.objects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER Person.reminder;
GO
CREATE TRIGGER reminder
ON Person.Address
AFTER UPDATE
AS
IF ( UPDATE (StateProvinceID) OR UPDATE (PostalCode) )
BEGIN
RAISERROR (50009, 16, 10)
END;
GO
-- Test the trigger.
UPDATE Person.Address
SET PostalCode = 99999
WHERE PostalCode = '12345';
GO
参照
COLUMNS_UPDATED (Transact-SQL)
CREATE TRIGGER (Transact-SQL)