SQL更新/删除触发器无法正常工作

时间:2010-06-30 16:30:48

标签: sql triggers

我有一个触发器,用于审核插入,更新和删除的行。我遇到了从触发器获取旧值和新值的问题。触发器利用循环插入以任何方式(插入,更新,删除)更改的任何行的所有值。但是,我的代码不返回值,而是返回列名作为值。

以下是我的代码的一部分:

SELECT @COLNAME = NAME 
FROM SYSCOLUMNS 
WHERE COLID = @FIELD AND
    ID = (SELECT ID FROM SYSOBJECTS WHERE NAME = 'FIN_HOTEL_DTL_TYPE') 
SELECT @OLDVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM DELETED 
SELECT @NEWVAL = SUBSTRING(@COLNAME, 2, LEN(@COLNAME)) FROM INSERTED 
SELECT @MODBY = MODIFIED_BY FROM INSERTED 
SELECT @MODDT = MODIFIED_DATETIME FROM INSERTED 

1 个答案:

答案 0 :(得分:3)

T-SQL只是一个不同的世界。

您的代码完全按照您的要求执行操作。 @ColName不是对列对象的引用,而是一个包含已使用列名加载的字符串值的变量。

我建议您查看example。如果您愿意,请阅读整篇文章,但如果您赶时间,请下载“CREATE TRIGGER Audit”一词。

另外,花时间使用基于集合的逻辑执行此操作 - 如示例中所示。通过利用T-SQL并放弃逐行编码的绑定来利用DBMS的功能和性能。不完全是。编码循环=性能不佳。如果需要,DBMS将在后台实现循环(或者它希望)。

祝你好运!


我之前试图找到此链接。我相信Paul Nielsen的this posting非常接近你想要的。