update()和columns_updated()之间的区别

Har*_*hna 2 sql-server

我正在使用SQL Server 2012。

我的表定义:

create table cust
(
     cid int identity,
     cnm varchar(100),
     country varchar(100)
)

alter table cust 
  add constraint pk primary key clustered on cust(cid)
Run Code Online (Sandbox Code Playgroud)

我试图仅在更新cnm或country列时创建审核记录。

我的2个查询:

create trigger trig_nm on cust
as
    if columns_updated(cnm, country)
    --create records.

create trigger trig_nm on cust
as
    if update(cnm) or update(country)
       --create records.
Run Code Online (Sandbox Code Playgroud)

2个查询之间有什么区别?

Sel*_*vaS 5

不能这样使用 columns_updated(cnm,country)

COLUMNS_UPDATED函数返回varbinary,您需要进行一些按位计算以标识要更新的列。

根据MSDN

COLUMNS_UPDATED返回一个或多个从左到右排序的字节,每个字节中的最低有效位为最右边。

要测试对特定列的更新或插入,请遵循语法并使用按位运算符和要测试的列的整数位掩码。例如,表t1包含列C1,C2,C3,C4和C5。要验证列C2,C3和C4是否都已更新(表t1具有UPDATE触发器),请遵循&14的语法。要测试是否仅更新C2列,请指定&2。

您必须像这样使用它来检查第2,3和4列是否已更新

IF (COLUMNS_UPDATED() & 14) > 0
--Create Records
Run Code Online (Sandbox Code Playgroud)

对于UPDATE()函数,Boolean如果给定的列已更新,则返回。

你可以这样使用

IF ( UPDATE(cnm) OR UPDATE(Country))
--Create records
Run Code Online (Sandbox Code Playgroud)