我正在使用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个查询之间有什么区别?
不能这样使用 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)