我写了代码。但我不明白为什么会出现这个错误:
超出最大存储过程、函数、触发器或视图嵌套级别(限制 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;
您的桌子上还有其他触发器吗? 它们可能会互相触发,直到“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)。”
解决方案是检查触发器中的嵌套级别
IF TRIGGER_NESTLEVEL() > 1
RETURN