SSIS Foreach 循环失败
SSIS Foreach Loop failure
我已经创建了一个 ID 列表查找和一个后续的 Foreach 循环到 运行 每个 ID 的 sql stmt。
我用于捕获 ID 列表的变量称为 MissingRecordIDs,属于 Object 类型。在 Foreach 容器中,我将每个值映射到一个名为 RecordID 的 Int32 类型变量。没有花哨的脚本-我遵循了这些说明:https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis-/(没有文件加载部分-我只是运行宁一个SQL stmt)。
在 SSIS 中运行没问题,但是当我在 MSSQL 中部署我的集成服务目录时它失败了。
这是我从 SQL Mgt Studio 运行ning 时得到的错误:
我想我可以在 MissingRecordsIDs 被填充后放置一个 Precendence Constraint 以检查 NULL 并在必要时跳过 Foreach 循环 - 但我不知道如何检查 Object 变量中的 NULL?
这是变量声明和枚举的对象:
这里是变量映射:
'Lookup missing Orders'中的SQL stmt:
select distinct cast(od.order_id as int) as order_id
from invman_staging.staging.invman_OrderDetails_cdc od
LEFT OUTER JOIN invman_staging.staging.invman_Orders_cdc o
on o.order_id = od.order_id and o.BatchID = ?
where od.BatchID = ?
and o.order_id is null
and od.order_id is not null
在当前环境中,此查询 returns 没有 - 没有遗漏的订单,所以我根本不想进入 'Foreach Order Loop'。
这是 Microsoft 知道的一个已知问题:https://connect.microsoft.com/SQLServer/feedback/details/742282/ssis-2012-wont-assign-null-values-from-sql-queries-to-variables-of-type-string-inside-a-foreach-loop
我建议在查询中添加一个 ISNULL(RecordID, 0) 并为组件设置一个表达式 "Load missing Orders" 以便仅启用它当 RecordID != 0.
在我的例子中,不是 NULL 导致了问题,我从数据库加载的 ID 值存储为 nvarchar(50),即使它是一个整数,我试图在 SSIS 中将它用作整数并且它一直给我同样的错误信息,这对我有用:
SELECT CAST(id as INT) FROM dbo.Table
我已经创建了一个 ID 列表查找和一个后续的 Foreach 循环到 运行 每个 ID 的 sql stmt。
我用于捕获 ID 列表的变量称为 MissingRecordIDs,属于 Object 类型。在 Foreach 容器中,我将每个值映射到一个名为 RecordID 的 Int32 类型变量。没有花哨的脚本-我遵循了这些说明:https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis-/(没有文件加载部分-我只是运行宁一个SQL stmt)。
在 SSIS 中运行没问题,但是当我在 MSSQL 中部署我的集成服务目录时它失败了。
这是我从 SQL Mgt Studio 运行ning 时得到的错误:
我想我可以在 MissingRecordsIDs 被填充后放置一个 Precendence Constraint 以检查 NULL 并在必要时跳过 Foreach 循环 - 但我不知道如何检查 Object 变量中的 NULL?
这是变量声明和枚举的对象:
这里是变量映射:
'Lookup missing Orders'中的SQL stmt:
select distinct cast(od.order_id as int) as order_id
from invman_staging.staging.invman_OrderDetails_cdc od
LEFT OUTER JOIN invman_staging.staging.invman_Orders_cdc o
on o.order_id = od.order_id and o.BatchID = ?
where od.BatchID = ?
and o.order_id is null
and od.order_id is not null
在当前环境中,此查询 returns 没有 - 没有遗漏的订单,所以我根本不想进入 'Foreach Order Loop'。
这是 Microsoft 知道的一个已知问题:https://connect.microsoft.com/SQLServer/feedback/details/742282/ssis-2012-wont-assign-null-values-from-sql-queries-to-variables-of-type-string-inside-a-foreach-loop
我建议在查询中添加一个 ISNULL(RecordID, 0) 并为组件设置一个表达式 "Load missing Orders" 以便仅启用它当 RecordID != 0.
在我的例子中,不是 NULL 导致了问题,我从数据库加载的 ID 值存储为 nvarchar(50),即使它是一个整数,我试图在 SSIS 中将它用作整数并且它一直给我同样的错误信息,这对我有用:
SELECT CAST(id as INT) FROM dbo.Table