2009-11-16 35 views
0

我爲我的應用程序編寫了以下觸發器,它給了我這個錯誤「Msg 4104,Level 16 ,狀態1,過程AddItemToCurrentItems,行11多部分標識符「INSERTED.IsActive」無法綁定。「Msg 4104,Level 16,State 1,Procedure AddItemToCurrentItems,Line 11無法綁定多部分標識符「INSERTED.IsActive」

我與這個觸發內涵是對錶「項」插入的數據複製到餐桌「CurrentItems」,但只有在項目表位字段設置爲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

你在你缺少插入表的引用if語句,就需要這個樣子:

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語句都列列表...

+0

非常感謝chadhoc – Xience 2009-11-16 14:50:06

相關問題