非要看更新了哪个字段吗? 在触发器里修改 首先,通过select count(*) from syscolumns where id = objects_id(更新表) 得到字段总数。 建一个循环,用update(字段名)来逐一检查每个字段是否更改。 if update(字段名)中字段名可能不好确认,那么可以: select 字段名=name from syscolumns where ...... set 字段名语句 =if update('+字段名+')' ..... exec sp_executesql 字段名语句 等
测试在指定的列上进行的 INSERT 或 UPDATE 操作。IF (COLUMNS_UPDATED())
测试是否插入或更新了提及的列
COLUMNS_UPDATED的判断比较复杂,最好你能自己仔细看帮助的说明。
IF UPDATE(column) 可判断某字段是否更新,但如果字段太多的话太麻烦,有没有更好的办法
如果必须测试影响到表中前 8 列以外的列的更新时,必须使用 UBSTRING 函数测试由 COLUMNS_UPDATED 返回的适当的位。下例测试影响 Northwind.dbo.Customers 表中的第 3、第 5 或第 9 列的更新。USE Northwind
DROP TRIGGER tr1
GO
CREATE TRIGGER tr1 ON Customers
FOR UPDATE AS
IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1))
+ power(2,(5-1)))
AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(1-1)))
)
PRINT 'Columns 3, 5 and 9 updated'
GOUPDATE Customers
SET ContactName=ContactName,
Address=Address,
Country=Country
GO
有没有什么方法能不用判断,直接查找出更新的字段?
在触发器里修改
首先,通过select count(*) from syscolumns where id = objects_id(更新表)
得到字段总数。
建一个循环,用update(字段名)来逐一检查每个字段是否更改。
if update(字段名)中字段名可能不好确认,那么可以:
select 字段名=name from syscolumns where ......
set 字段名语句 =if update('+字段名+')' .....
exec sp_executesql 字段名语句
等