UPDATE - 觸發程序函式 (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
傳回一個布林值,用來指出是否在資料表或檢視的指定資料行上嘗試了 INSERT 或 UPDATE。 在 Transact-SQL INSERT 或 UPDATE 觸發程序主體內的任何位置使用 UPDATE(),測試觸發程序是否應該執行某些動作。
語法
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
值將會傳回 true
或 1
,即使資料行的值維持不變也是如此。 這是根據設計的行為,且觸發程序應該實作商務邏輯,以決定是否可允許插入/更新/刪除作業。
範例
下列範例會建立一個當任何人試圖升級 StateProvinceID
資料表的 PostalCode
或 Address
資料行時,將訊息列印到用戶端的觸發程序。
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)