2012-08-08 118 views
0

我只插入在“转储”表中不存在于活动表中的新记录。我的问题是有一个标识列,我不想插入到现场,我想活的表标识列负责增加值,但我得到一个插入错误“插入错误:列名或数量提供的值与表定义不匹配。“有没有解决这个问题的方法,或者是唯一能够一起移除标识列的修复程序?选择不存在的位置不包括标识列

感谢, 山姆

+2

显示您的SQL语句 – Curt 2012-08-08 13:39:47

回答

1

你需要列出在查询所有需要的列,但不包括标识列。

为什么你永远不应该使用SELECT *的另一个原因。

INSERT liveTable 
(col1, col2, col3) 
SELECT col1, col2, col3 
FROM dumpTable dt 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM liveTable lt 
    WHERE lt.Id == dt.Id 
) 

临提示:您还可以使用dump和现场表之间的OUTER JOIN和使用WHERE liveTable.col1 = NULL(你可能会需要有资格与转储表的别名选择列名)上面实现。

+1

另请参阅http://stackoverflow.com/a/729221/27535 – gbn 2012-08-08 13:42:30

0

你可以离开该列在您的插入statment这样

insert into destination (col2, col3, col4) 
select col2, col3 col4 from source 

不要做只是

insert into destination 
select * from source 
+0

谢谢,什么是奇怪的是我没有做选择*我没有选择ID字段。我在另一个查询中做了类似的事情,没有发生错误。 – 2012-08-08 19:05:26

+0

很难说出你的问题是什么。您能否在[SQLFiddle.com](http://sqlfiddle.com)上提供示例? – 2012-08-08 19:09:08

+0

这里是在sql提琴.. http://sqlfiddle.com/#!3/872f0/2 – 2012-08-09 13:37:40

1

我想通了这个问题....我的直播表没有ID字段设置为身份,不知何故,当我创建它时,该字段设置不正确。