Sql server update()和列_updated()之间的差异

Sql server update()和列_updated()之间的差异,sql-server,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) 我试图仅在更新cnm或国家/地区列时创建审计记录 我的两个问题: create trigger trig

我正在使用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)
我试图仅在更新cnm或国家/地区列时创建审计记录

我的两个问题:

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.

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

不可能这样使用
列\u更新(cnm,国家)

COLUMNS\u UPDATED
函数返回
varbinary
,您需要进行一些逐位计算以确定哪些列被更新

根据,

COLUMNS\u UPDATED返回一个或多个从左开始排序的字节 向右,每个字节中的最低有效位为 最右边的

检验 更新或插入到特定列,请使用 位运算符和被测试列的整数位掩码。 例如,表t1包含C1、C2、C3、C4和C5列。到 验证C2、C3和C4列是否都已更新(使用表t1 具有更新触发器),请按照&14的语法进行操作。检验 是否仅更新C2列,请指定&2

您必须像这样检查列2、3和4是否更新

IF (COLUMNS_UPDATED() & 14) > 0
--Create Records
对于
UPDATE()
函数,如果给定列被更新,它将返回
Boolean

你可以这样使用它

IF ( UPDATE(cnm) OR UPDATE(Country))
--Create records
这不是工作原理,所以一个是语法错误,另一个不是?