我遇到了以下问题:我在表A上有一个触发器,其目的是计算一些值并将它们插入完全不同的表B.
问题是,在该逻辑的某个地方,有一个循环需要将新插入表B的值。
我注意到SQL Server在退出触发器后立即执行所有INSERT
命令。
ALTER TRIGGER [dbo].[InsertTrade]
ON [dbo].[Blotter]
AFTER INSERT
AS
BEGIN
/* compute @Variables */
INSERT INTO [dbo].[CompletelyUnrelatedTableWithoutTriggersOnIt]
VALUES @Variables
COMMMIT
是否有INSERT
表示{{1}}能够在触发器中读取这些值的方法吗?
谢谢, d。
答案 0 :(得分:1)
首先,要非常小心如何构建触发器。如果您在触发器中使用INSERT...VALUES()
,则表明您假设INSERTED
表中只有一条记录,这是一个很好的迹象。永远不要做那个假设。相反,您的逻辑应该是INSERT...SELECT <computed cols> FROM INSERTED
其次,如果你想要输出你刚才输入的值,你可以使用OUTPUT条款,但我不确定你的意思是什么(你不清楚自己想要做什么然后,您将可以访问“仍然在触发器中”插入的最终值
如果不你想要什么,也许将所有这些功能封装到proc中会更好。