今天,我试图弄清楚如何通过我正在使用 MVS 2015(使用 SSDT 14.0.61709.290)构建的 SSIS 包将标识列插入 Microsoft SQL 2016 数据库的行。我正在从另一个数据源中提取数据(可以正常工作),并且我正在将行插入到先前在目标 SQL 服务器上定义的目标表中,如下所示:
create table [DB_NAME].[dbo].[TableName]
(
key_value IDENTITY(1,1) primary key,
...other values...
)
GO
当我将值从旧数据源移动到新数据源时,出现错误:
[MSQL Deal [70]] 错误:发生打开数据库连接 (ODBC) 错误。状态:'23000'。本机错误代码:544。 [Microsoft][SQL Server Native Client 11.0][SQL Server]当 IDENTITY_INSERT 设置为 OFF 时,无法在表“TableName”中插入标识列的显式值。
搜索时出现大量论坛和结果,表明在修改目标的列映射页面时应该有一个允许身份插入的复选框。此选项不存在,并且 MVS/SSDT 2015/2017 中的“高级编辑器”界面仅具有列映射,没有用于处理标识列插入的选项。
此外,我还尝试在我的控制流中添加一个步骤来打开身份插入,但由于某种原因,在此级别启用 IDENTITY_INSERT 不起作用,并且我的包在所有插入尝试中仍然失败。
现在我将完全诚实,我完全意识到我有其他选择来让它工作 - 但请记住,我正在构建开发测试和生产数据库,我试图保持脚本化和自动化以及白痴证明它进一步走向部署。我不想引入一个中间步骤,迫使我们的一个 DBA 等待第一个 SSIS 包完成,运行一个 SQL 查询,该查询将为特定表启用身份插入,运行下一个包,然后运行查询以禁用身份插入。我必须这样做很多次......
SSIS 2015(我尝试使用 MVS/SSDT 2017)是否完全放弃了对身份插入的支持?我是否必须对我的 DSN 使用不同的接口才能使其正常工作(ODBC?)?
这仍然是一个选项,但它隐藏在某个地方真的非常非常好?