共用方式為


UPDATE() (Transact-SQL)

傳回一個布林值,用來指出是否在資料表或檢視的指定資料行上嘗試了 INSERT 或 UPDATE。Transact-SQL INSERT 或 UPDATE 觸發程序主體內的任何位置,都可以利用 UPDATE() 來測試觸發程序是否應該執行特定動作。

主題連結圖示Transact-SQL 語法慣例

語法

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) 值。

ms187326.note(zh-tw,SQL.90).gif附註:
IF UPDATE(column) 子句的功能與 IF、IF...ELSE 或 WHILE 子句相同,可以使用 BEGIN...END 區塊。如需詳細資訊,請參閱<流程控制語言 (Transact-SQL)>。

Transact-SQL 觸發程序主體內的任何位置,都可以使用 UPDATE(column)。

ms187326.note(zh-tw,SQL.90).gif附註:
在 SQL Server 2000 中,UPDATE() 不會偵測 timestamp 資料行的變更。對於這些資料行而言,不論資料行是否升級,觸發程序主體內的 IF UPDATE() 子句都會傳回 TRUE。在 SQL Server 2005 中,UPDATE() 會偵測 timestamp 資料行的變更。如果升級這些資料行,DML 觸發程序主體內的 IF UPDATE() 子句會傳回 TRUE。

範例

下列範例會建立一個當任何人試圖升級 Address 資料表的 StateProvinceIDPostalCode 資料行時,將訊息列印到用戶端的觸發程序。

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 協助