我只从“转储”表中插入活动表中不存在的新记录。我的问题是有一个身份列我不想插入实时,我希望实时表身份列负责增加值,但我收到插入错误“插入错误:列名或数量提供的值与表定义不匹配。” 有没有办法解决这个问题,或者是唯一一起删除标识列的方法?
谢谢,山姆
我只从“转储”表中插入活动表中不存在的新记录。我的问题是有一个身份列我不想插入实时,我希望实时表身份列负责增加值,但我收到插入错误“插入错误:列名或数量提供的值与表定义不匹配。” 有没有办法解决这个问题,或者是唯一一起删除标识列的方法?
谢谢,山姆
您需要列出查询中所有需要的列,不包括标识列。
永远不要使用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
(您可能需要使用转储表别名来限定选择的列名)来实现上述目的。
我发现了这个问题......我的活动表没有将 ID 字段设置为身份,不知何故,当我创建它时,该字段设置不正确。
您可以像这样在插入语句中保留该列
insert into destination (col2, col3, col4)
select col2, col3 col4 from source
不要只做
insert into destination
select * from source