在 table 上进行批量插入之前检查行或 ID 是否已经存在
Check to see if a row or an ID already exist before doing a mass insert on a table
我正在尝试从一个数据库 table 插入另一个数据库,如下所示:
INSERT INTO factoryDB_Development.dbo.engineList
SELECT *
FROM factoryDB_Staging.dbo.engineList
WHERE engineID NOT IN (SELECT engineID
FROM factoryDB_Development.dbo.engineList)
但是我收到这个错误:
Cannot insert duplicate key in object 'dbo.engineList'
我假设这是因为该 ID 已经存在于 factoryDB_Development.dbo.engineList
。
当我在 Microsoft 网站上在线查看时,我看到了这个:
To work around this issue, enable trace flag 8690 to disable the Spool operation
有没有办法在执行插入之前检查行或 ID 是否已经存在?
谢谢!
如果我对您的问题的理解正确,您希望避免在目标 table 中插入记录(如果具有相同 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, 'A') , (2, 'B')
--insert data from source to target
INSERT INTO Target
SELECT * FROM Source
DROP TABLE SOURCE
DROP TABLE TARGET
我正在尝试从一个数据库 table 插入另一个数据库,如下所示:
INSERT INTO factoryDB_Development.dbo.engineList
SELECT *
FROM factoryDB_Staging.dbo.engineList
WHERE engineID NOT IN (SELECT engineID
FROM factoryDB_Development.dbo.engineList)
但是我收到这个错误:
Cannot insert duplicate key in object 'dbo.engineList'
我假设这是因为该 ID 已经存在于 factoryDB_Development.dbo.engineList
。
当我在 Microsoft 网站上在线查看时,我看到了这个:
To work around this issue, enable trace flag 8690 to disable the Spool operation
有没有办法在执行插入之前检查行或 ID 是否已经存在?
谢谢!
如果我对您的问题的理解正确,您希望避免在目标 table 中插入记录(如果具有相同 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, 'A') , (2, 'B')
--insert data from source to target
INSERT INTO Target
SELECT * FROM Source
DROP TABLE SOURCE
DROP TABLE TARGET