在数据流任务中,我可以将行计数放入处理流中,并将计数放入变量中。如果行数大于0,我可以稍后使用该变量有条件地执行一些其他工作。这对我来说工作得很好,但是对于期望返回单行的sql任务,我没有相应的策略。在这种情况下,我将这些值返回到变量中。如果查找没有生成任何行,则在为这些变量赋值时,sql任务将失败。我可以对失败的组件进行分支,但这有一个副作用--如果我将该作业作为SQL server代理作业步骤运行,该步骤将返回DTSER_FAILURE,从而导致该步骤失败。我可以告诉sql代理忽略步骤失败,但这样我就不知道我在该步骤中是否有合法的错误。这似乎比它应该做的更难。
我能想到的唯一策略是使用count(*)聚合并测试是否返回大于0的数字,如果是,则再次运行查询,而不使用count。这很难看,因为我在两个地方有相同的查询,我需要保持同步。
有没有更好的方法?
发布于 2010-05-31 12:22:18
在相同条件下,您可以使用其他逻辑(&&或||)。我会从你的单个语句中取一个变量,然后说一些大意如下:
如果默认|| @User:single_record_var!= @User::rowcount>0
这应该会有帮助。
发布于 2010-05-30 17:47:04
什么样的SQL语句?您是否可以将其更改为仍然返回全部为NULL的单行,而不是不返回任何行?
是什么阻止它返回多行?如果包最终返回多个行,那么它将失败,对吗?
您还可以将其更改为调用存储过程,然后在两个位置调用该存储过程,而不会出现代码重复。您还可以将其更改为视图或用户定义函数(如果需要参数),使用SELECT COUNT(*) FROM udf()
检查是否有数据,使用SELECT * FROM udf()
获取行。
https://stackoverflow.com/questions/2931334
复制相似问题