我只插入在“转储”表中不存在于活动表中的新记录。我的问题是有一个标识列,我不想插入到现场,我想活的表标识列负责增加值,但我得到一个插入错误“插入错误:列名或数量提供的值与表定义不匹配。“有没有解决这个问题的方法,或者是唯一能够一起移除标识列的修复程序?选择不存在的位置不包括标识列
感谢, 山姆
我只插入在“转储”表中不存在于活动表中的新记录。我的问题是有一个标识列,我不想插入到现场,我想活的表标识列负责增加值,但我得到一个插入错误“插入错误:列名或数量提供的值与表定义不匹配。“有没有解决这个问题的方法,或者是唯一能够一起移除标识列的修复程序?选择不存在的位置不包括标识列
感谢, 山姆
你需要列出在查询所有需要的列,但不包括标识列。
为什么你永远不应该使用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
(你可能会需要有资格与转储表的别名选择列名)上面实现。
另请参阅http://stackoverflow.com/a/729221/27535 – gbn 2012-08-08 13:42:30
你可以离开该列在您的插入statment这样
insert into destination (col2, col3, col4)
select col2, col3 col4 from source
不要做只是
insert into destination
select * from source
谢谢,什么是奇怪的是我没有做选择*我没有选择ID字段。我在另一个查询中做了类似的事情,没有发生错误。 – 2012-08-08 19:05:26
很难说出你的问题是什么。您能否在[SQLFiddle.com](http://sqlfiddle.com)上提供示例? – 2012-08-08 19:09:08
这里是在sql提琴.. http://sqlfiddle.com/#!3/872f0/2 – 2012-08-09 13:37:40
我想通了这个问题....我的直播表没有ID字段设置为身份,不知何故,当我创建它时,该字段设置不正确。
显示您的SQL语句 – Curt 2012-08-08 13:39:47