适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 SQL 数据库
返回一个布尔值,表示是否 INSERT 在表或视图的指定列上进行了 or UPDATE 尝试。 UPDATE()用于 Transact-SQL INSERT 或 UPDATE 触发器内部的任何位置,以测试触发器是否应执行某些动作。
语法
UPDATE ( column )
参数
column
是测试 或 INSERTUPDATE 动作的列名称。 由于表名是在触发器的 ON 子句中指定的,因此不要在列名前包含表名。 列可以是 SQL Server 支持的任何数据类型。 但是,计算列不能用于此上下文。
返回类型
布尔
备注
UPDATE无论 或 INSERTUPDATE 尝试是否成功,都返回 TRUE。
要测试 INSERT 多列的 OR UPDATE 动作,应在第一个列后指定一个单独 UPDATE的(列)子句。 也可以通过使用COLUMNS_UPDATED测试 INSERT 多列或 UPDATE 动作。 这会返回一个位模式,指示插入或更新的列。
IF UPDATE 在操作中 INSERT 返回 TRUE 值,因为列中插入了显式值或隐含(NULL)值。
注意
IF UPDATE(列)子句的作用与IF, IF...ELSE,或WHILE子句,并且可以使用BEGIN...终点。 有关详细信息,请参阅控制流语言 (Transact-SQL)。
UPDATE(柱)可以在 Transact-SQL 触发器体内的任何位置使用。
如果将触发器应用于列,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