2017-04-04 128 views
1

在table1中對table2進行了一些更改。我需要進入表table3中table1中缺少的值。插入從SQL Server中選擇

表1

Column1 
a 
b 

d 
e 

g 
h 
i 

表2

Column1 
a 
b 
c 
d 
e 
f 

代碼:

INSERT INTO [dbo].[table3] 
    SELECT * 
    FROM [dbo].[table2] 
    WHERE NOT EXISTS (SELECT * 
         FROM [dbo].[table1] 
         WHERE [dbo].[table2].column1 = [dbo].[table1].column1 
         AND [dbo].[table2].column1 = [dbo].[table1].Pernr); 

我得到一個錯誤:

Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.

我需要:

表3

Column1 
c 
f 

昨天我的劇本的工作,但今天是怎麼了。我不知道爲什麼?

感謝意見

+0

什麼是'.Pernr',爲什麼你要將一列與另一個表中的2個不同列進行比較? –

回答

4

當您使用insert列表中的列:

INSERT INTO [dbo].[table3](column1) 
    SELECT t2.column1 
    FROM [dbo].[table2] t2 
    WHERE NOT EXISTS (SELECT 1 
         FROM [dbo].[table1] t1 
         WHERE t2.column1 = t1.column1 
        ); 

當然,你可以有用於插入多個列。只需在insertselect中都列出。我不知道什麼Pernr。這不是你問題的一部分。當然,您可以在子查詢中的WHERE子句中添加其他子句。

如果table3不存在,那麼使用select into而不是insert

SELECT t2.* 
    INTO table3 
    FROM [dbo].[table2] t2 
    WHERE NOT EXISTS (SELECT 1 
         FROM [dbo].[table1] t1 
         WHERE t2.column1 = t1.column1 
        ); 
1
DECLARE @Table1 TABLE (Column1 VARCHAR(2)) 
INSERT INTO @Table1 VALUES ('a'),('b'),('d'),('e'),('g'),('h'),('i') 

DECLARE @Table2 TABLE (Column1 VARCHAR(2)) 
INSERT INTO @Table2 VALUES ('a'),('b'),('c'),('d'),('e'),('f') 


DECLARE @Table3 TABLE (Column1 VARCHAR(2)) 
INSERT INTO @Table3 
SELECT 
* 
FROM @Table2 T2 
WHERE T2.Column1 NOT IN 
(SELECT Column1 FROM @Table1) 

SELECT 
* 
FROM @Table3 
1

只需使用 「不」 - 子查詢,如下

select * into #yourTable3 from #yourtable2 
    where column1 not in (select column1 from #yourtable1 where column1 is not null) 

你的表:

create table #yourtable1 (column1 varchar(10)) 
insert into #yourtable1 (
Column1) values 
('a') 
,('b') 
,(null) 
,('d') 
,('e') 
, (null) 
,('g') 
,('h') 
,('i') 

create table #yourtable2 (column1 varchar(10)) 
insert into #yourtable2 (column1) values 
('a') 
,('b') 
,('c') 
,('d') 
,('e') 
,('f')