这给出了错误
Msg 156,Level 15,State 1,Procedure Trig_Insert_Serials_Null,Line 30
附近的语法不正确
关键字' INSERT'。
表格结构:
Serials (CurrencyId, DivisionId, BranchId, NewSerialNumber, Display, TypeId)
我想在(CurrencyId, DivisionId, BranchId
)中将0更改为null。
CREATE TRIGGER Trig_Insert_Serials_Null
ON Serials
INSTEAD OF INSERT
AS
BEGIN
DECLARE @currencyId int;
DECLARE @branchId int;
DECLARE @divisionId int;
SELECT @currencyId = INSERTED.CurrenceyId FROM INSERTED;
SELECT @branchId = INSERTED.BranchId FROM INSERTED;
SELECT @divisionId = INSERTED.DivisionId FROM INSERTED;
IF @currencyId = 0
SET @currencyId = NULL;
END
IF @branchId = 0
SET @branchId = NULL;
END
IF @divisionId = 0
SET @divisionId = NULL;
END
INSERT INTO Serials (CurrenceyId,DivisionId,BranchId,NewSerialNumber,
Display, TypeId)
VALUES (INSERTED.CurrenceyId,INSERTED.DivisionId, INSERTED.BranchId,
INSERTED.NewSerialNumber, INSERTED.Display,INSERTED.TypeId)
END
GO
答案 0 :(得分:1)
删除3个IF语句中的3个END。
END应以BEGIN开头
您的触发器中有4个结束且只有一个BEGIN
答案 1 :(得分:1)
您假设触发器每行触发一次 - 这是错误。
触发器每个触发一次,并且可以针对插入50行的单个INSERT
语句触发。
因此,您的陈述如下:
SELECT @currencyId = INSERTED.CurrenceyId FROM INSERTED;
会悲惨地失败。
您需要重新编写触发器才能将此考虑在内 - Inserted
表可以包含一个或多个行 - 您不能简单地假设它始终是一行。< / p>
基本上,你需要做这样的事情:
INSERT INTO Serials (CurrenceyId, DivisionId, BranchId, NewSerialNumber, Display, TypeId)
SELECT
CASE i.CurrenceyId WHEN 0 THEN NULL ELSE i.CurrenceyId END,
CASE i.DivisionId WHEN 0 THEN NULL ELSE i.DivisionId END,
CASE i.BranchId WHEN 0 THEN NULL ELSE i.BranchId END,
i.NewSerialNumber, i.Display, i.TypeId
FROM Inserted i