次の方法で共有


UPDATE() (Transact-SQL)

テーブルまたはビューの指定された列で、INSERT または UPDATE が行われたかどうかを示すブール値を返します。UPDATE() は Transact-SQL の INSERT または UPDATE トリガの内部のどこでも使用でき、そのトリガが特定の動作を実行すべきかどうかをテストすることができます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

UPDATE ( column ) 

引数

column

INSERT 動作または UPDATE 動作をテストする列の名前です。トリガの ON 句にテーブル名が指定されているため、列名の前にテーブル名を含めないでください。この列のデータ型は、SQL Server 2005 がサポートしているものであれば、どのようなデータ型でもかまいません。ただし、計算列を使用することはできません。

戻り値の型

Boolean

解説

INSERT または UPDATE が成功するかどうかにかかわらず、UPDATE() は TRUE を返します。

複数の列で INSERT 動作または UPDATE 動作をテストするには、最初の UPDATE(column) 句に続けて、別の UPDATE(column) 句を指定します。COLUMNS_UPDATED を使用しても、複数の列で INSERT 動作または UPDATE 動作をテストできます。これは、挿入または更新された列を示すビット パターンを返します。

INSERT 動作では、列には明示的な値または暗黙的な (NULL) 値が挿入されるので、IF UPDATE は TRUE の値を返します。

ms187326.note(ja-jp,SQL.90).gifメモ :
IF UPDATE(column) 句は、IF 句、IF...ELSE 句、または WHILE 句と同じ役割を果たし、BEGIN...END ブロックを使用できます。詳細については、「流れ制御言語 (Transact-SQL)」を参照してください。

UPDATE(column) は、Transact-SQL トリガの内部のどこでも使用できます。

ms187326.note(ja-jp,SQL.90).gifメモ :
SQL Server 2000 では、UPDATE() は timestamp 列への変更を検出しません。これらの列の場合、トリガ内部の IF UPDATE() 句は、列が更新されているかどうかにかかわらず、FALSE を返します。SQL Server 2005 では、UPDATE() は timestamp 列への変更を検出します。DML トリガ内部の IF UPDATE() 句は、これらの列が更新されると TRUE を返します。

次の例では、Address テーブルの StateProvinceID 列または PostalCode 列を更新しようとすると、クライアントへのメッセージを出力するトリガを作成します。

USE AdventureWorks;
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)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手