Вставить и обновить триггер - PullRequest
0 голосов
/ 08 октября 2018

У меня есть таблица со столбцами uploaddate и systemuser и триггер для добавления пользователя и даты для новой записи

USE [ITPrinter]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[trg01]
ON [dbo].[Printers]
FOR INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE Printers
    SET UploadDate = GETDATE(), SystemUser = SUSER_SNAME()
    WHERE id IN (SELECT ID FROM inserted)
END

Работает нормально.

Теперь я создаю 2новые столбцы, changedate и changeuser в той же таблице.Моя цель обновить записи, которые меняются пользователем и датой.НО НЕ ИЗМЕНИТЬ информацию в столбцах UploadDate и SystemUser.

Это мой второй триггер

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[trg02]
ON [dbo].[Printers]
AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE p
    SET p.ChangeDate = GETDATE(), p.ChangeUser = SUSER_SNAME()
    FROM Printers p
    INNER JOIN inserted i ON p.id = i.id

Но это не сработало, я получаю эту ошибку

Превышен максимальный уровень вложенности хранимой процедуры, функции, триггера или представления (предел 32)

1 Ответ

0 голосов
/ 08 октября 2018

На основе кода и сообщения об ошибке, с которым мы имеем дело с Microsoft SQL Server.

похоже, что ваша база данных настроена на рекурсивные триггеры.

Чтобы отключить напрямуюрекурсивные триггеры (имеется в виду, триггер обновления, запускаемый обновлением, внесенным в таблицу тем же триггером обновления), вы можете отключить рекурсивные триггеры, используя alter database:

ALTER DATABASE MyDataBase SET RECURSIVE_TRIGGERS OFF;
GO

Вы также можете установить вложение триггераустановите значение 0, чтобы отключить как прямую, так и косвенную рекурсию триггера, но я бы рекомендовал использовать этот шаг с осторожностью, особенно если вы используете триггеры для обеспечения соблюдения бизнес-правил.

EXEC sp_configure 'nested triggers', 0 ;  
GO  
RECONFIGURE;  
GO  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...