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

时间:2015-04-10 09:47:48

标签: 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或国家/地区列时创建审核记录。

我的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.

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

1 个答案:

答案 0 :(得分: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

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

你可以使用它,

IF ( UPDATE(cnm) OR UPDATE(Country))
--Create records
相关问题