如何解决在表格上进行批量插入之前,请检查行或ID是否已存在
我正在尝试从一个数据库表插入到另一个数据库表,像这样:
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'中插入重复的键
我认为这是因为该ID已存在于factoryDB_Development.dbo.engineList
中。
当我在Microsoft网站上进行在线检查时,我看到了以下内容:
To work around this issue,enable trace flag 8690 to disable the Spool operation
是否可以在插入之前检查行或ID是否已存在?
谢谢!
解决方法
如果我正确理解了您的问题,那么如果已经存在具有相同ID的记录,则希望避免在目标表中插入记录。
如果有问题的ID列是主键,则可以通过重新创建索引来简单地将IGNORE_DUP_KEY = ON设置。
下面是示例示例。
CREATE TABLE [dbo].[Source](
[ID] [int] NULL,[Name] [varchar](5) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Target](
[ID] [int] NOT NULL,[Name] [varchar](5) NULL,PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = ON,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON,OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
--input sample values in source
INSERT INTO [Source] VALUES (1,'A'),(1,(2,'B')
--insert data from source to target
INSERT INTO Target
SELECT * FROM Source
DROP TABLE SOURCE
DROP TABLE TARGET
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。