UPDATE() (Transact-SQL)

返回一个布尔值,指示是否对表或视图的指定列进行了 INSERT 或 UPDATE 尝试。可以在 Transact-SQL INSERT 或 UPDATE 触发器主体中的任意位置使用 UPDATE(),以测试触发器是否应执行某些操作。

主题链接图标Transact-SQL 语法约定

语法

UPDATE ( column ) 

参数

  • 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)。

注意注意

在 SQL Server 2000 中,UPDATE() 不检测对时间戳列的更改。对于这些列,触发器主体中的 IF UPDATE() 子句将返回 FALSE,而不考虑是否已更新列。在 SQL Server 2008 和 SQL Server 2005 中,UPDATE() 将检测对时间戳列的更改。如果这些列已更新,则 DML 触发器主体中的 IF UPDATE() 子句将返回 TRUE。

示例

以下示例将创建一个触发器,如果有人尝试更新 Address 表的 StateProvinceID 或 PostalCode 列时,该触发器将向客户端输出一条消息。

USE AdventureWorks2008R2;
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