繁体   English   中英

单行结果集导致SSIS SQL执行任务错误但没有返回行

[英]SSIS SQL Execute task error caused by single row result set but no rows were returned

在 SSIS 2008 中,我在 Foreach 循环中有一个执行 SQL 任务,它将从表中获取一个结果值并将其放入文件系统任务的变量中。 SQL 代码类似于:

SELECT productcode
FROM products
WHERE eancode = ?

如果与相应的 eancode 匹配,代码将从表 products 返回产品代码。 ? 是 SSIS 中从图像文件名派生的变量。

基本上,包 (loop+sqltask+FStask) 会将文件名从 eancode 更改为 productcode。

有时包失败是因为 SQL 任务尝试获取产品代码但无法返回结果。 如果表中不存在 eancode,则会发生这种情况。

可以做些什么来处理这样的错误,这样循环就不会停止?

我想到了这些可能的解决方案:

  1. 使用 ISNULL(productcode,'replacement') 不是一个选项。 结果集将用于一个变量,该变量将用于重命名图像的文件名。 这将导致每个无结果图像获得“替换”名称。 此外,它不会返回任何内容,甚至不会返回 isnull 替换。

  2. 更改 exec SQL 任务或 ForEach 循环的属性设置,因此它跳到下一个,但跳到哪个和哪个?

  3. 将失败的优先约束从 sql 任务添加到另一个(子)任务。 但它应该导致什么任务? 如果在 sql 任务中没有结果集,它基本上什么都没有。

  4. 将约束更改为 Complete,但这将导致 FileSystem 任务出错,因为它缺少 Destination 文件路径名的值。 如果 sql 任务失败,则不应在下一个任务中重命名该文件。

理想的情况是,如果 sql 任务由于没有结果集而失败,则当前循环将保留 SQL 步骤并继续进行下一轮。

谢谢

这应该确保每次都返回一行,然后您可以在后续步骤中确定如何忽略NULL。

但是SSIS可能太笨了,无法在您按下参数按钮时弄清楚参数的位置。

SELECT TOP 1 productcode
FROM (
SELECT productcode
FROM products
WHERE eancode = ?
UNION ALL 
SELECT NULL
) As F
ORDER BY productcode DESC

您可以评估查询中填充的变量值,并将条件添加到成功约束中以检查变量的值。 我整理了一个简单的示例,但希望对您有所帮助。

我使用了这个功能:

LEN(@[User::Variable]) > 0

在此处输入图片说明

在此处输入图片说明

唯一的原因是您在结果集中设置了一些数据。 因此,结果集数据可能与您的sql执行任务不匹配。 所以请检查它的结果集和传递的变量都应该匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM