从尚未预设记录的临时 table 插入记录失败
Insert records from temp table where record is not already preset fails
我正在尝试从临时 table 插入常规数据,但由于临时 table 中的数据共享我正在插入的 table 的主键的相同值到,它因违反主键约束而失败。这是预料之中的,所以我通过仅插入主键不存在的行来解决它 table 我正在插入到。
我尝试了 EXISTS 和 NOT IN 方法,我检查了展示这两种方法的示例,确认这两种方法通常都在 SQL 服务器 2014 中工作,但我仍然得到以下错误:
Violation of PRIMARY KEY constraint 'PK_dbo.InsuranceObjects'. Cannot
insert duplicate key in object 'dbo.InsuranceObjects'. The duplicate
key value is (3835fd7c-53b7-4127-b013-59323ea35375).
这是我试过的 NOT IN 方差中的 SQL:
print 'insert into InsuranceObjects'
INSERT INTO $(destinDB).InsuranceObjects
(
Id, Value, DefInsuranceObjectId
)
SELECT Id, InsuranceObjectsValue, DefInsuranceObjectId
FROM #vehicle v
WHERE v.Id NOT IN (SELECT Id FROM $(destinDB).InsuranceObjects) -- prevent error when running scrypt multiple times over
GO
如果不明显:
- Id 是有问题的主键。
- $(destinDB) 是命令行变量。不同于 TSQL 变量。
它允许我方便地定义目标数据库和实例
基于脚本的级别甚至基于多个脚本的级别。它用于
整个代码中的多个变体,到目前为止已经执行
完美。唯一的缺点是您必须在 CMD 模式下 运行。
- 创建所有临时文件时 tables USE $(some database) 也被使用所以
这不是问题
我一定是遗漏了一些非常明显的东西,但如此简单的查询失败让我抓狂。更糟糕的是,当我尝试 运行ning select 而不插入部分时,它 returns 来自 temp table 的所有记录,尽管我已经确认有重复项应该使 NOT IN where 子句中的一部分。
我怀疑问题是您的临时文件中有重复的 ID 值 table。请检查那里的值,因为它会导致您看到的问题。
我正在尝试从临时 table 插入常规数据,但由于临时 table 中的数据共享我正在插入的 table 的主键的相同值到,它因违反主键约束而失败。这是预料之中的,所以我通过仅插入主键不存在的行来解决它 table 我正在插入到。
我尝试了 EXISTS 和 NOT IN 方法,我检查了展示这两种方法的示例,确认这两种方法通常都在 SQL 服务器 2014 中工作,但我仍然得到以下错误:
Violation of PRIMARY KEY constraint 'PK_dbo.InsuranceObjects'. Cannot insert duplicate key in object 'dbo.InsuranceObjects'. The duplicate key value is (3835fd7c-53b7-4127-b013-59323ea35375).
这是我试过的 NOT IN 方差中的 SQL:
print 'insert into InsuranceObjects'
INSERT INTO $(destinDB).InsuranceObjects
(
Id, Value, DefInsuranceObjectId
)
SELECT Id, InsuranceObjectsValue, DefInsuranceObjectId
FROM #vehicle v
WHERE v.Id NOT IN (SELECT Id FROM $(destinDB).InsuranceObjects) -- prevent error when running scrypt multiple times over
GO
如果不明显:
- Id 是有问题的主键。
- $(destinDB) 是命令行变量。不同于 TSQL 变量。 它允许我方便地定义目标数据库和实例 基于脚本的级别甚至基于多个脚本的级别。它用于 整个代码中的多个变体,到目前为止已经执行 完美。唯一的缺点是您必须在 CMD 模式下 运行。
- 创建所有临时文件时 tables USE $(some database) 也被使用所以 这不是问题
我一定是遗漏了一些非常明显的东西,但如此简单的查询失败让我抓狂。更糟糕的是,当我尝试 运行ning select 而不插入部分时,它 returns 来自 temp table 的所有记录,尽管我已经确认有重复项应该使 NOT IN where 子句中的一部分。
我怀疑问题是您的临时文件中有重复的 ID 值 table。请检查那里的值,因为它会导致您看到的问题。