0

こんにちは、テストフィールド1で正常に機能するトリガー挿入を作成しました。トリガーが設定されているテーブルにデータをコピーするか、コード挿入を使用します。インサートは次のようになります。

SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO
Create TRIGGER sometr ON [dbo].[mpomiar] For INSERT
 AS
Begin 
iNSERT INTO  
[Database].dbo.[eksport] ([Repair_Date],[idKard],[Position],[error][Pos_X],[Pos_Y],[Pos_Z],[name],[model],[parent]) 

SELECT i.[Repair_Date],c.idKard,i.[Position],i.error,i.[Pos_X],i.[Pos_Y],i.[Pos_Theta],s.name, mo.Model, pn.Parent 

FROM inserted i
 inner join dbo.test t on i.idtst=t.idtst

 inner join dbo.Kard c on t.idKard=c.idKard

 inner join dbo.TFILE AS s ON t.idTFILE = s.idTFILE INNER JOIN

        dbo.MACHINE AS mc ON t.idMC = mc.idMC INNER JOIN

         dbo.PANEL AS p ON c.idPANEL = p.idPANEL INNER JOIN

        dbo.PARENT AS pn ON i.idPARENT = pn.idPARENT INNER JOIN

         dbo.MODEL AS mo ON pn.idMOD = mo.idMOD

where [Repair_Error] in (400,300)     and c.idKard not in (select idKard from dbo.eksport)

end

しかし、トリガーがMS SQL Server 2005の実際のテーブルに設定されている場合、コードから削除したときにのみ起動します

[Repair_Error] は (400,300) にあり、c.idKard はありません (dbo.eksport から idKard を選択)

4

1 に答える 1

0

トリガーをテストしましたが、以下がなくても機能します。

where [Repair_Error] in (400,300) 

しかし、それは以下で動作します:

where c.idKard not in (select idKard from dbo.eksport)

トリガーが機能する必要がありますwith where [Repair_Error] in (400,300)

于 2012-11-07T07:04:06.630 に答える