2016-11-26 98 views
-1

如何在將記錄插入表之前檢查三個不同表中是否存在bomItem字段值。我要檢查如何檢查多個表中的記錄是否存在

1. `bomitem` of `BOMHEAD` Table with `itemId` of `Table A` 
     or 
    2. `bomitem` of `BOMHEAD` Table with `itemId` of `Table B` 
     or 
    3. `bomitem` of `BOMHEAD` Table with `itemId` of `Table C` 

是否相等

如果存在無論是在三代表其良好的BOMHEAD表中創建一個記錄。上述三張表中唯一的共同字段是itemId字段,它們包含廣泛不同的屬性。

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[BOMHEAD](
    [bomItem] [int] NOT NULL, 
    [bomRev] [nvarchar](6) NOT NULL, 

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

樣本數據

Table A 
100199 
100200 
100201 

Table B. 
200199 
200200 
200201 
200202 

table C 
400199 
400200 
400201 

現在,我想補充我要錄製BOMHEAD

INSERT INTO BOMHEAD (bomItem) VALUES (400199); //OK since exist in Table C 
INSERT INTO BOMHEAD (bomItem) VALUES (200202); //OK since exist in Table B 
INSERT INTO BOMHEAD (bomItem) VALUES (500202); //NO because doesnt exist in either A or B or C tables 
+0

什麼是來源?從哪張表中拉出記錄並插入「BOMHEAD」中。 –

+0

表A或B或C.爲了將記錄插入到'BOMHEAD'表中,必須有表A或表B或表C(僅相對於BomItem字段)中的匹配記錄。 – afri

+0

當所有三個表都有'bomitem' –

回答

1

使用EXISTS檢查記錄是否存在的表格中。這裏有一種方法

INSERT INTO BOMHEAD(bomItem) 
SELECT bomItem 
FROM (VALUES (400199), 
       (200202), 
       (200202))tc(bomItem) 
WHERE EXISTS (SELECT 1 FROM TableA A WHERE tc.bomItem = A.itemId) 
     OR EXISTS (SELECT 1 FROM TableB B WHERE tc.bomItem = B.itemId) 
     OR EXISTS (SELECT 1 FROM TableC C WHERE tc.bomItem = C.itemId) 

另一種方法(可能不如上面的查詢效率高。與你的真實數據運行它來檢查的性能)。

INSERT INTO BOMHEAD 
      (bomItem) 
SELECT bomItem 
FROM (VALUES (400199), 
       (200202), 
       (200202))tc(bomItem) 
WHERE EXISTS (SELECT 1 
       FROM (SELECT itemId FROM TableA A 
         UNION ALL 
         SELECT itemId FROM TableB B 
         UNION ALL 
         SELECT itemId FROM TableC C) a 
       WHERE a.itemId = tc.bomItem) 
+0

Thankyou的底部!我怎麼可以將它添加爲一個約束或與創建表語句,而不是使用特定的記錄? – afri

+0

@afri - 您無法將其作爲約束來處理。無論你需要一個觸發器或插入時確保你做了上述檢查。 –

+0

非常感謝。如果你可以提供一些關於如何將這個轉換爲觸發器的提示將會很棒。 – afri