0

我只从“转储”表中插入活动表中不存在的新记录。我的问题是有一个身份列我不想插入实时,我希望实时表身份列负责增加值,但我收到插入错误“插入错误:列名或数量提供的值与表定义不匹配。” 有没有办法解决这个问题,或者是唯一一起删除标识列的方法?

谢谢,山姆

4

3 回答 3

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
)

专业提示:您还可以通过OUTER JOIN在转储表和实时表之间使用并使用WHERE liveTable.col1 = NULL(您可能需要使用转储表别名来限定选择的列名)来实现上述目的。

于 2012-08-08T13:41:17.170 回答
1

我发现了这个问题......我的活动表没有将 ID 字段设置为身份,不知何故,当我创建它时,该字段设置不正确。

于 2012-08-09T14:09:41.150 回答
0

您可以像这样在插入语句中保留该列

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

不要只做

insert into destination
select * from source
于 2012-08-08T13:41:36.800 回答