我正在使用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个查询之间有什么区别?
答案 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