消息4104,级别16,状态1,过程AddItemToCurrentItems,第11行无法绑定多部分标识符“INSERTED.IsActive”

时间:2009-11-16 13:49:22

标签: sql-server

我为我的应用程序编写了以下触发器,它给出了我的错误“消息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

任何想法,我在这里做错了。

1 个答案:

答案 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语句中包含列列表...