在 SQL Server 2008 中截断后在批量插入中重复主键?

sto*_*age 3 sql-server-2008 ssis bulkcopy

我正在使用 SSIS 将数据从我的 SQL Server 2008 prod 数据库转储到平面文件,然后使用批量插入将这些平面文件加载到 SQL Server 2008 dev 数据库中。SSIS 包在批量插入之前运行 TRUNCATE TABLE 语句,但是当我运行它时,我仍然收到此错误:“语句已终止。违反 PRIMARY KEY 约束。无法插入重复键。” 为什么截断后会有重复的键?在批量插入之前,我还需要做些什么来清除主键?

Aar*_*and 5

如果您已经截断了表,那么主键违规必须来自文件中的重复数据。尝试在没有 PK 约束的情况下批量插入新表,然后检查表中是否有重复项(可能比编写一些工具或脚本来直接解析文件更容易)。您可以通过这种方式创建一个没有约束的模拟表:

SELECT * INTO dbo.new_bulk_source
  FROM dbo.old_source
  WHERE 1 = 0;
Run Code Online (Sandbox Code Playgroud)

然后更改您的包以引用此表,执行插入操作,然后运行:

SELECT key FROM dbo.new_bulk_source
  GROUP BY key
  HAVING COUNT(*) > 1;
Run Code Online (Sandbox Code Playgroud)

我敢打赌,电话是从房子内部发出的(或者截断没有成功)。