【发布时间】:2014-06-07 13:29:46
【问题描述】:
在 SSIS 2008 中,我在 Foreach 循环中有一个执行 SQL 任务,它将从表中获取一个结果值并将其放入文件系统任务的变量中。 SQL 代码类似于:
SELECT productcode
FROM products
WHERE eancode = ?
如果与对应的 eancode 匹配,该代码将返回表 products 中的 productcode。 ? 是 SSIS 中从图像文件名派生的变量。
基本上,包(loop+sqltask+FStask)会将文件名从eancode更改为productcode。
有时包会失败,因为 SQL 任务尝试获取产品代码但无法返回结果。如果 eancode 在表中不存在,则会发生这种情况。
如何处理此类错误以使循环不会停止?
我想到了这些可能的解决方案:
使用 ISNULL(productcode,'replacement') 不是一个选项。结果 set 将用于一个变量,该变量将用于重命名 图像的文件名。这将导致每个没有结果的图像得到 “替换”名称。此外,它只是不会返回任何东西,不 甚至是 isnull 替换。
更改 exec SQL 任务或 ForEach 循环的属性设置, 所以它会跳到下一个,但是哪个和什么?
将失败的优先约束从 sql 任务添加到另一个(子) 任务。但它应该导致什么任务?如果 sql 任务中没有结果集,它基本上什么都没有。
将约束更改为 Complete,但这会导致 FileSystem 任务出错,因为它缺少目标文件路径名的值。如果 sql 任务失败,则不应在下一个任务中重命名文件。
理想的情况是如果 sql 任务因为没有结果集而失败,当前循环将保留 SQL 步骤并继续下一轮。
谢谢
【问题讨论】:
标签: sql sql-server-2008 tsql foreach ssis