适用于:
SQL Server
Azure SQL 数据库
Azure SQL 托管实例
返回一个布尔值,指示是否尝试对表或视图的指定列执行 INSERT 或 UPDATE 操作。 可以在 Transact-SQL INSERT 或 UPDATE 触发器主体中的任意位置使用 UPDATE(),以测试触发器是否应执行某些操作。
Transact-SQL 语法约定
UPDATE ( column )
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
column
要为 INSERT 或 UPDATE 操作测试的列的名称。 由于表名是在触发器的 ON 子句中指定的,因此不要在列名前包含表名。 列可以是 SQL Server 支持的任何数据类型。 但是,计算列不能用于此上下文。
Boolean
UPDATE() 返回 TRUE,不考虑 INSERT 或 UPDATE 尝试是否成功。
若要测试对多个列执行的 INSERT 或 UPDATE 操作,请在第一个操作后指定单独的 UPDATE(column) 子句。 通过使用 COLUMNS_UPDATED,也可以为 INSERT 或 UPDATE 操作测试多个列。 这会返回一个位模式,指示插入或更新的列。
在 INSERT 操作中,IF UPDATE 将返回 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;
IF EXISTS (SELECT name FROM sys.objects
WHERE name = 'reminder' AND type = 'TR')
DROP TRIGGER Person.reminder;
CREATE TRIGGER reminder
ON Person.Address
AFTER UPDATE
IF ( UPDATE (StateProvinceID) OR UPDATE (PostalCode) )
BEGIN
RAISERROR (50009, 16, 10)
-- Test the trigger.
UPDATE Person.Address
SET PostalCode = 99999
WHERE PostalCode = '12345';
COLUMNS_UPDATED (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:https://aka.ms/ContentUserFeedback。
提交和查看相关反馈