Триггер возвратил набор результатов, и параметр сервера «запрещать результаты от триггеров» имеет значение true - PullRequest
1 голос
/ 01 апреля 2011

у меня есть триггер, работающий с таблицей, которая не возвращает набор результатов:

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;

Удаление строк из таблицы Nodes приведет к ошибке:

Сообщение 524, Уровень 16, Состояние 1, Процедура LogDelete_Node, Строка 10
Триггер возвратил набор результатов, и параметр сервера «Запрещать результаты от триггеров» имеет значение true.

Как сделать триггер, который не возвращает набор результатов, не возвращает набор результатов?


Примечание: Первоначально был определен триггер, в котором для установки переменной использовался неизменный синтаксис:

    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)

Ответ следовать

Мы выяснили проблему, когда я составлял этот вопрос. Я все еще собираюсь задать вопрос, так как ответ может оказаться очень полезным для всех, кто имеет эту загадочную проблему.

Смотри также

1 Ответ

3 голосов
/ 01 апреля 2011

Решение проблемы оказалось в том, что опция SSMS Включить фактический план выполнения была включена.

SQL Server (по ошибке) считает «секретный» набор результатов, содержащий план выполненияинформация, возвращаемая триггером.


Отключите эту опцию, чтобы увидеть план выполнения, и он работает.Это затрудняет отслеживание планов выполнения, поскольку вам не разрешено просматривать планы выполнения.

Скорее всего, это ошибка в SQL Server 2005.

...