分享方式:


UPDATE - 觸發程序函式 (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

UPDATE ( column )   

引數

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

傳回型別

布林值

備註

不論 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)。

如果觸發程序套用至資料行,則 UPDATED 值將會傳回 true1,即使資料行的值維持不變也是如此。 這是根據設計的行為,且觸發程序應該實作商務邏輯,以決定是否可允許插入/更新/刪除作業。

範例

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

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)