为什么会出现此错误:“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)。”

问题描述 投票:0回答:1

我写了代码。但我不明白为什么会出现这个错误:

超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)

在这种情况下我可以使用触发器吗?或者我是否需要更改触发器(例如输出)?

CREATE TABLE shop1
(
    GoodsID INT IDENTITY(1,1) PRIMARY KEY,
    price int,
    orderdate datetime2 DEFAULT GETDATE()
);

CREATE TABLE shop2
(
    GoodsID INT IDENTITY(1,1) PRIMARY KEY,
    price int,
    orderdate datetime2 DEFAULT GETDATE()
);

CREATE TABLE shopglobal 
(
    GoodsID INT IDENTITY(1,1) PRIMARY KEY,
    price int,
    orderdate datetime2 DEFAULT GETDATE(),
    region NVARCHAR(100)
);

CREATE TRIGGER trig_SHOP1
ON [SHOP1]
FOR INSERT, DELETE, UPDATE
AS
    IF EXISTS (SELECT * FROM inserted) 
       AND NOT EXISTS(SELECT * FROM deleted)
    BEGIN
        INSERT INTO shopglobal (price, orderdate, region) 
            SELECT i.price, i.orderdate, 'shop1' 
            FROM Inserted i
    END

    IF EXISTS (SELECT * FROM deleted) 
       AND NOT EXISTS(SELECT * FROM inserted)
    BEGIN
        DELETE FROM shopglobal
        WHERE GoodsID IN (SELECT deleted.GoodsID FROM deleted)
    END   

    IF EXISTS (SELECT * FROM inserted) 
       AND EXISTS (SELECT * FROM deleted)
    BEGIN
        UPDATE shopglobal
        SET price = inserted.price,
            orderdate = inserted.orderdate
        FROM shopglobal
        INNER JOIN inserted ON shopglobal.GoodsID = inserted.GoodsID AND region = 'shop1'
    END;
sql sql-server t-sql triggers
1个回答
0
投票

您的桌子上还有其他触发器吗? 它们可能会互相触发,直到“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)。”

解决方案是检查触发器中的嵌套级别

IF TRIGGER_NESTLEVEL() > 1
 RETURN

这篇文章提供了很好的解释 https://www.mssqltips.com/sqlservertip/1713/maximum-stored-procedure-function-trigger-or-view-nesting-level-exceeded-limit-32/

© www.soinside.com 2019 - 2024. All rights reserved.