我为我的应用程序编写了以下触发器,它给出了我的错误“消息4104,级别16,状态1,过程AddItemToCurrentItems,第11行多部分标识符”INSERTED.IsActive“无法绑定。”
我对此触发器的意图是将表“Item”中的插入数据复制到表“CurrentItems”,但仅当Items表中的位字段设置为True即1时。两个表具有相同的表结构
CREATE TRIGGER AddItemToCurrentItems
ON ITEMS FOR INSERT
--,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
IF INSERTED.IsActive = 1
BEGIN
INSERT INTO CurrentItems
SELECT * FROM INSERTED
END
END
任何想法,我在这里做错了。
答案 0 :(得分:1)
你在if if子句中缺少对INSERTED表的引用,需要看起来像这样:
IF exists (select * from inserted i where i.IsActive = 1) BEGIN
...
但是请注意,插入/更新的表总是可以包含多个记录,就像任何SQL表一样,因此您需要确保您的逻辑处理多个记录的可能性,例如您的IF块中的插入应该可能包含一个额外的where子句,如下所示:
IF exists (select * from inserted i where i.IsActive = 1)
BEGIN
INSERT CurrentItems SELECT * FROM INSERTED where IsActive = 1
END
或者,您可以完全忽略IF块并执行以下操作:
INSERT CurrentItems SELECT * FROM INSERTED where IsActive = 1
请注意,您可能还应考虑在insert和select语句中包含列列表...