【发布时间】:2020-12-29 05:50:21
【问题描述】:
我正在尝试像这样从一个数据库表插入另一个数据库表:
INSERT INTO factoryDB_Development.dbo.engineList
SELECT *
FROM factoryDB_Staging.dbo.engineList
WHERE engineID NOT IN (SELECT engineID
FROM factoryDB_Development.dbo.engineList)
但我收到此错误:
无法在对象“dbo.engineList”中插入重复键
我认为这是因为 factoryDB_Development.dbo.engineList 中已经存在该 ID。
当我在微软网站上查看时,我刚刚看到了这个:
To work around this issue, enable trace flag 8690 to disable the Spool operation
有没有办法在插入之前检查行或 ID 是否已经存在?
谢谢!
【问题讨论】:
-
由于您正在验证目标表中不存在 engineID,我猜您从原始表中获取了重复项,因此出现了错误。
-
@iceblade 谢谢!我想我明白你的意思....有没有办法只插入原始表中的一个重复项?就像原来的 'engineList' 表有 3 行的一个 engineID,我可以插入第一个吗?
-
当然,您可以从源表中仅选择不同的引擎 ID,然后从同一个表中使用前 1 进行交叉应用以获取其他列。这样,您将消除重复项。您可以提供数据示例,以便我们帮助您进行查询。
-
如果您确定所有重复的行都是相同的,您可以只选择不同的,这将选择并插入每个 engineID 仅 1 行
-
是的,如果行相同,您可以这样做:Select distinct * From factoryDB_Staging.dbo.engineList
标签: tsql sql-server-2012