UPDATE() (Transact-SQL)

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

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

語法

UPDATE ( column ) 

引數

  • column
    這是進行 INSERT 或 UPDATE 動作測試的資料行名稱。由於資料表名稱指定在觸發程序的 ON 子句中,因此,請勿在資料行名稱前面併入資料表名稱。資料行可以是 SQL Server 所支援的任何資料類型。不過,在這個內容中,不能使用計算資料行。

傳回類型

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 2008 和 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