UPDATE() (Transact-SQL)
傳回一個布林值,用來指出是否在資料表或檢視的指定資料行上嘗試了 INSERT 或 UPDATE。Transact-SQL INSERT 或 UPDATE 觸發程序主體內的任何位置,都可以利用 UPDATE() 來測試觸發程序是否應該執行特定動作。
語法
UPDATE ( column )
引數
column
這是進行 INSERT 或 UPDATE 動作測試的資料行名稱。由於資料表名稱指定在觸發程序的 ON 子句中,因此,請勿在資料行名稱前面併入資料表名稱。資料行可以是 SQL Server 2005 所支援的任何資料類型。不過,在這個內容中,不能使用計算資料行。
傳回類型
Boolean
備註
不論 INSERT 或 UPDATE 嘗試成功與否,UPDATE() 都會傳回 TRUE。
若要測試多個資料行的 INSERT 或 UPDATE 動作,請在第一個資料行之後,指定個別的 UPDATE(column) 子句。您可以利用 COLUMNS_UPDATED 來測試多個資料行的 INSERT 或 UPDATE 動作。這會傳回一個位元模式來指出插入或更新了哪些資料行。
IF UPDATE 會在 INSERT 動作中傳回 TRUE 值,因為資料行插入了明確的值或隱含的 (NULL) 值。
附註: |
---|
IF UPDATE(column) 子句的功能與 IF、IF...ELSE 或 WHILE 子句相同,可以使用 BEGIN...END 區塊。如需詳細資訊,請參閱<流程控制語言 (Transact-SQL)>。 |
Transact-SQL 觸發程序主體內的任何位置,都可以使用 UPDATE(column)。
附註: |
---|
在 SQL Server 2000 中,UPDATE() 不會偵測 timestamp 資料行的變更。對於這些資料行而言,不論資料行是否升級,觸發程序主體內的 IF UPDATE() 子句都會傳回 TRUE。在 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)