日期:2014-05-19  浏览次数:20673 次

触发器为什么没有运行?

我在一个存储过程中有以下语句

SET   @SQL= 'UPDATE     ConsignOutgo2   SET   ConsignOutgo2OutgoInvoiceID= '+CAST(@IDTo   AS   NVARCHAR)
+ '   WHERE   (ConsignOutgo2ID   IN   '+@OutgoInvoiceDetail   + ')   AND   (ConsignOutgo2OutgoInvoiceID=-1)   '

EXEC(@SQL)

在表   ConsignOutgo2   有   AFTER   INSERT   UPDATE   DELETE   触发器

但有时存储过程正确运行后触发器没有运行,请指点。

------解决方案--------------------
SET @SQL= 'UPDATE ConsignOutgo2 SET ConsignOutgo2OutgoInvoiceID= ' ' '+CAST(@IDTo AS NVARCHAR)
+ ' ' ' WHERE (ConsignOutgo2ID IN ' ' '+@OutgoInvoiceDetail + ' ' ') AND (ConsignOutgo2OutgoInvoiceID=-1) '

EXEC(@SQL)
------解决方案--------------------
1.檢查下表中的數據,確定代碼有執行UPDATE。

另外,檢查下,表中是否有滿足條件的數據

2.檢查下UPDATE觸發器的代碼,確保沒有錯誤。
------解决方案--------------------
你傳入的參數是不是類似 '1,2,3 ' 這種格式的,如果是的話,可以不需要使用動態SQL語句,可以改用CharIndex實現,也可以避免調試動態SQL語句的嘛發。

UPDATE ConsignOutgo2 SET ConsignOutgo2OutgoInvoiceID= @IDTo
WHERE (CharIndex( ', ' + Cast(ConsignOutgo2ID As Varchar) + ', ', ', ' + @OutgoInvoiceDetail + ', ') > 0 AND (ConsignOutgo2OutgoInvoiceID=-1