选择除了标识列之外不存在的位置

时间:2012-08-08 13:38:30

标签: tsql

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

谢谢, 萨姆

3 个答案:

答案 0 :(得分: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来实现上述目的(您可能需要限定使用转储表别名选择的列名) 。

答案 1 :(得分:1)

我发现了问题....我的实时表没有将ID字段设置为标识,不知何故,当我创建它时,该字段未正确设置。

答案 2 :(得分:0)

您可以将此列留在插入语句中,如此

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

不要只做

insert into destination
select * from source