SSIS Error: Could not complete cursor operation
SSIS Error: Could not complete cursor operation
我有一个每天早上运行的 SQL 服务器作业。它存在于我无权访问的环境中。
此作业运行多个 SSIS 包。它运行的第一个包相当简单。它有 5 个基本步骤:
- 执行SQL。创建一个暂存 table 平面文件源插入其中。
- 数据流任务。将数据从平面文件源移动到 OLEDB 目标(暂存 table)。我有一个数据转换任务,它只是将每一列设置为
nvarchar(255)
。这很好用。
- 序列容器(3在里面执行SQL任务)。此容器包含三个执行 SQL 任务,所有这些任务都对暂存 table 进行数据更新(更新 NULLS、无效文本等)。
我不在 SSIS 包本身中使用游标。我在下面列出了错误:
An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Could not complete cursor operation because the table schema changed after the cursor was declared.". End Error
此错误还引用了两个组件:
OLE DB Destination [25] Description: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "input "OLE DB Destination Input" (38)" failed because error code 0xC020907B occurred, and the error row disposition on "input "OLE DB Destination Input" (38)" specifies failure on error.
我没有在这个 SSIS 包中构建或使用游标。我所做的唯一数据库更改是构建暂存 table.
与我一起解决此问题的联系人说这可能是由 NULL 值引起的,但是,我的所有列都可以为 NULL。
显然 SSIS 在内部使用游标来处理您需要的一些任务 - MS 开发人员使用游标是很常见的。您可以尝试通过 运行 您的项目并禁用任务并 运行 它或通过非常仔细地阅读进度选项卡来隔离哪个任务出错。
我会尝试,对于执行 SQL 任务,将 Bypass Prepare 设置为 true 并再次尝试任务。
事实证明,环境已以需要重建数据库索引的方式进行了修补。因此,执行包时架构与存储的元数据不同。
我确信这个错误的原因不止一个,但这就是我们遇到的情况。
感谢所有评论的人。
当 运行 一个将 SCD 组件用于维度 table 的包时,我们得到了相同的错误消息。遵循重建索引的建议对我们有用。但是我们执行了两个动作。确切地说,我们做了以下事情:
- 删除并重新创建索引
- 重新创建了维度包的 SCD 组件(只需将一个非业务键属性的类型更改为业务键属性,完成向导,反之亦然)。
我有一个每天早上运行的 SQL 服务器作业。它存在于我无权访问的环境中。
此作业运行多个 SSIS 包。它运行的第一个包相当简单。它有 5 个基本步骤:
- 执行SQL。创建一个暂存 table 平面文件源插入其中。
- 数据流任务。将数据从平面文件源移动到 OLEDB 目标(暂存 table)。我有一个数据转换任务,它只是将每一列设置为
nvarchar(255)
。这很好用。 - 序列容器(3在里面执行SQL任务)。此容器包含三个执行 SQL 任务,所有这些任务都对暂存 table 进行数据更新(更新 NULLS、无效文本等)。
我不在 SSIS 包本身中使用游标。我在下面列出了错误:
An OLE DB record is available. Source: "Microsoft OLE DB Provider for SQL Server" Hresult: 0x80004005 Description: "Could not complete cursor operation because the table schema changed after the cursor was declared.". End Error
此错误还引用了两个组件:
OLE DB Destination [25] Description: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "input "OLE DB Destination Input" (38)" failed because error code 0xC020907B occurred, and the error row disposition on "input "OLE DB Destination Input" (38)" specifies failure on error.
我没有在这个 SSIS 包中构建或使用游标。我所做的唯一数据库更改是构建暂存 table.
与我一起解决此问题的联系人说这可能是由 NULL 值引起的,但是,我的所有列都可以为 NULL。
显然 SSIS 在内部使用游标来处理您需要的一些任务 - MS 开发人员使用游标是很常见的。您可以尝试通过 运行 您的项目并禁用任务并 运行 它或通过非常仔细地阅读进度选项卡来隔离哪个任务出错。
我会尝试,对于执行 SQL 任务,将 Bypass Prepare 设置为 true 并再次尝试任务。
事实证明,环境已以需要重建数据库索引的方式进行了修补。因此,执行包时架构与存储的元数据不同。
我确信这个错误的原因不止一个,但这就是我们遇到的情况。
感谢所有评论的人。
当 运行 一个将 SCD 组件用于维度 table 的包时,我们得到了相同的错误消息。遵循重建索引的建议对我们有用。但是我们执行了两个动作。确切地说,我们做了以下事情:
- 删除并重新创建索引
- 重新创建了维度包的 SCD 组件(只需将一个非业务键属性的类型更改为业务键属性,完成向导,反之亦然)。