2014-01-14 142 views
0

插入数据通常是简单:插入数据从一个表到另一个从一个表到另一个离开已经存在的行

SELECT * INTO A FROM B

但只是出于好奇,假设我有两个表tbl_Atbl_B。我有100条记录tbl_B和一些20排在tbl_A(其中一些可能是两个表中常见的),我想插入来自tbl_B行到tbl_A哪些不是已经存在于tbl_A'

而且,让我们假设两表具有标识字段。

+0

我希望我清楚我想问什么,如果不是,请让我知道。 – Arbaaz

回答

0

您可以使用NOT EXISTS

INSERT INTO tbl_A 
    SELECT IdCol, Col2, Col3 
    FROM dbo.tbl_B B 
    WHERE NOT EXISTS(SELECT 1 FROM tbl_A A2 WHERE A2.IdCol = B.IdCol) 
+0

我想'INSERT INTO Tbl_BankEntry_exp SELECT * FROM dbo.Tbl_BankEntry乙 WHERE NOT EXISTS(SELECT 1 FROM Tbl_BankEntry_exp A2 WHERE A2.srno = B.srno)' 但它给我'标识列的显式值在表'Tbl_BankEntry_exp'中只能在列列表被使用且IDENTITY_INSERT为ON时指定。'# – Arbaaz

+1

@Arbaaz:这是这个问题的答案:http://stackoverflow.com/questions/2005437/an-explicit-value- for-the-identity-column-in-table-can-only-be-specified-when-a –

+0

谢谢Tim。 btw我假设'SELECT 1 FROM'从第一个提到的表中选择行?对? – Arbaaz

0

我认为这应该工作。

INSERT INTO tbl_A (IdCol, Col2, Col3) 
(SELECT IdCol, Col2, Col3 FROM dbo.tbl_B AS b 
WHERE b.IdCol NOT IN (SELECT Distinct IdCol FROM tbl_A)) 
相关问题