UPDATE() (Transact-SQL)

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

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

语法

UPDATE ( column ) 

参数

column

要为 INSERT 或 UPDATE 操作测试的列的名称。由于表名是在触发器的 ON 子句中指定的,因此不要在列名前包含表名。列可以是 SQL Server 2005 支持的任何数据类型。但是,计算列不能用于此上下文。

返回类型

Boolean

备注

UPDATE() 返回 TRUE,不考虑 INSERT 或 UPDATE 尝试是否成功。

若要测试对多个列执行的 INSERT 或 UPDATE 操作,请在第一个操作后指定单独的 UPDATE(column) 子句。通过使用 COLUMNS_UPDATED,也可以为 INSERT 或 UPDATE 操作测试多个列。这会返回一个位模式,指示插入或更新的列。

在 INSERT 操作中,IF UPDATE 将返回 TRUE 值,因为这些列插入了显式值或隐式 (NULL) 值。

ms187326.note(zh-cn,SQL.90).gif注意:
IF UPDATE(column) 子句的功能等同于 IF、IF...ELSE 或 WHILE 子句,并且可以使用 BEGIN...END 语句块。有关详细信息,请参阅控制流语言 (Transact-SQL)

可以在 Transact-SQL 触发器主体中的任意位置使用 UPDATE (column)。

ms187326.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2000 中,UPDATE() 不检测对 timestamp 列的更改。对于这些列,触发器主体中的 IF UPDATE() 子句将返回 FALSE,而不考虑是否已更新列。在 SQL Server 2005 中,UPDATE() 将检测对 timestamp 列的更改。如果这些列已更新,则 DML 触发器主体中的 IF UPDATE() 子句将返回 TRUE。

示例

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

USE AdventureWorks;
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)

帮助和信息

获取 SQL Server 2005 帮助