Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有没有办法忽略SSI中的映射错误?_Sql Server_Ssis_Conditional Statements_Qodbc - Fatal编程技术网

Sql server 有没有办法忽略SSI中的映射错误?

Sql server 有没有办法忽略SSI中的映射错误?,sql-server,ssis,conditional-statements,qodbc,Sql Server,Ssis,Conditional Statements,Qodbc,我在SSIS中有一个数据流,它使用ODBC源进行条件拆分 源根据源中数据的可用性返回一组动态列—列数从1到13 在我的条件拆分中,我让它指向源,并将数据提供给适合其列数的目标 例如: 条件1->将列1映射到列1,忽略其他12列 条件2->将第1列和第2列映射到第1列和第2列,忽略其他11列 但是,如果源仅包含1列,则在第二个条件下失败,因为“此路径上存在一些映射错误” 我知道列的计数永远不会超过13,这意味着我可以为列1-13设置条件 是否有任何方法可以忽略映射错误或强制SSI在条件剥离中的最后

我在SSIS中有一个数据流,它使用ODBC源进行条件拆分

源根据源中数据的可用性返回一组动态列—列数从1到13

在我的条件拆分中,我让它指向源,并将数据提供给适合其列数的目标

例如:

条件1->将列1映射到列1,忽略其他12列 条件2->将第1列和第2列映射到第1列和第2列,忽略其他11列

但是,如果源仅包含1列,则在第二个条件下失败,因为“此路径上存在一些映射错误”

我知道列的计数永远不会超过13,这意味着我可以为列1-13设置条件

是否有任何方法可以忽略映射错误或强制SSI在条件剥离中的最后一个可执行案例停止

我个人不想深入研究脚本组件,所以如果这可以通过条件拆分来实现,我会松一口气


有什么想法吗?

正如Larnu所指出的,数据流中的列数是设计时工件,不能在运行时更改

但是,您应该能够用12个数据流来处理这个问题

执行SQL任务->但是当前ODBC源正在生成一组可变列,请确定返回的列数。将此分配给SSIS变量
@[User::ColumnCount]

将执行SQL任务的12个输出路径附加到占源列数的自定义数据流任务

将每个路径上的优先约束更改为
约束和表达式
,表达式为
@[User::ColumnCount]==1
<代码>==13

SSIS设计器将在您设计包时尝试验证元数据。当您运行包时,执行引擎也是如此。因此,在完成每个数据流任务的设计后,需要将其延迟验证属性设置为True


事实上,当我更多地思考这个问题时,您希望这里的父/子包范例能更好地为您服务。按照每个数据流任务设计一个包,然后让父/控制器包调用它们,就像我上面描述的那样。这将简化您在构建时遇到的元数据验证挑战。

正如Larnu所指出的,数据流中的列数是设计时工件,不能在运行时更改

但是,您应该能够用12个数据流来处理这个问题

执行SQL任务->但是当前ODBC源正在生成一组可变列,请确定返回的列数。将此分配给SSIS变量
@[User::ColumnCount]

将执行SQL任务的12个输出路径附加到占源列数的自定义数据流任务

将每个路径上的优先约束更改为
约束和表达式
,表达式为
@[User::ColumnCount]==1
<代码>==13

SSIS设计器将在您设计包时尝试验证元数据。当您运行包时,执行引擎也是如此。因此,在完成每个数据流任务的设计后,需要将其延迟验证属性设置为True


事实上,当我更多地思考这个问题时,您希望这里的父/子包范例能更好地为您服务。按照每个数据流任务设计一个包,然后让父/控制器包调用它们,就像我上面描述的那样。这将简化您在构建此系统时遇到的元数据验证挑战。

SSIS需要为您的源和目标提供一个确定的定义。如果wither没有,则不能使用数据流。这是故意的。在我看来,如果没有定义数据定义,那才是真正的问题。数据需要“动态”方法通常意味着设计缺陷。如果ODBC在没有任何指定列的情况下转换查询,我必须面对一个真正的问题-返回将始终是动态的,取决于可用的数据。您可以建议一种动态创建数据定义的方法(这是我基本上尝试使用条件拆分所做的),或者将我指向一个资源。谢谢。当数据流中不存在替代方案时,我无法为您指出替代方案,@Channing。就像我说的,这是设计的。您可能会使用脚本任务自己编写解决方案,这意味着没有条件拆分或其他转换,因为它们不存在于脚本任务中;它是控制流的一部分,而不是数据流。SSIS要求为源和目标提供一个确定的定义。如果wither没有,则不能使用数据流。这是故意的。在我看来,如果没有定义数据定义,那才是真正的问题。数据需要“动态”方法通常意味着设计缺陷。如果ODBC在没有任何指定列的情况下转换查询,我必须面对一个真正的问题-返回将始终是动态的,取决于可用的数据。您可以建议一种动态创建数据定义的方法(这是我基本上尝试使用条件拆分所做的),或者将我指向一个资源。谢谢。当数据流中不存在替代方案时,我无法为您指出替代方案,@Channing。就像我说的,这是设计的。您可能会使用脚本任务自己编写解决方案,这意味着没有条件拆分或其他转换,因为它们不存在于脚本任务中;这是控制流的一部分,而不是数据流。这是完美的解决方案!最后,我在这里使用父/子范式来绕过任何元数据验证。我知道,正如Larnu所说,没有定义源代码是一个问题,但因为这是唯一的ODBC驱动程序兼容