Sql server 2005 触发器返回结果集和服务器选项';不允许来自触发器的结果';是真的

Sql server 2005 触发器返回结果集和服务器选项';不允许来自触发器的结果';是真的,sql-server-2005,triggers,ssms,Sql Server 2005,Triggers,Ssms,我有一个触发器运行在一个不返回结果集的表上: ALTER TRIGGER [dbo].[LogDelete_Nodes] ON [dbo].[Nodes] FOR DELETE AS BEGIN SET NOCOUNT ON; /* Load the saved context info UserGUID */ DECLARE @SavedUserGUID uniqueidentifier SET @SavedUserGUID = (SELECT CAST(c

我有一个触发器运行在一个不返回结果集的表上:

ALTER TRIGGER [dbo].[LogDelete_Nodes] ON [dbo].[Nodes]
FOR DELETE
AS
BEGIN
    SET NOCOUNT ON;

    /* Load the saved context info UserGUID */
    DECLARE @SavedUserGUID uniqueidentifier

    SET @SavedUserGUID = (SELECT CAST(context_info as uniqueidentifier)
         FROM master.dbo.sysprocesses
         WHERE spid = @@SPID)

   --remaining trigger contents deleted to provide simple example
END;
节点
表中删除行将导致错误:

Msg 524,16级,状态1,程序日志删除节点,第10行
触发器返回了一个resultset,服务器选项“disallow results from triggers”为true

如何使触发器不返回resultset而不返回resultset


注意:触发器最初定义为使用未弃用的语法设置变量:

    SELECT @SavedUserGUID = CAST(context_info as uniqueidentifier)
         FROM master.dbo.sysprocesses
         WHERE spid = @@SPID
它仍然会给出相同的错误

SELECT @@version

Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)   Nov 24 2008 13:01:59   
Copyright (C) 1988-2005 Microsoft Corporation  
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

答复如下 我们在我写这个问题的时候解决了这个问题。我仍然要问这个问题,因为这个答案可以证明对任何有这个神秘问题的人都非常有用

另见

问题的解决方案是因为启用了SSMS选项“包含实际执行计划”

SQL Server(错误地)计算触发器返回的包含执行计划信息的“机密”结果集


关闭该选项以查看执行计划,它就会工作。这使得跟踪执行计划变得困难,因为您不允许查看执行计划

这很可能是SQLServer2005中的一个bug