SQL 服务器 "shortcut" 处理中

SQL Server "shortcut" processing

这是我要解决的问题的简化版本。

我有一个临时 table #MyData,其中包含 2 列:descriptionvalue

我还有 tables MyRuleSequenceCollectionMyRuleSequenceMyRule,我想用它们来评估临时 table 中的数据. MyRuleSequenceMyRule 条记录的有序列表,MyRuleSequenceCollectionMyRuleSequence 条记录的无序集合。

其中一个序列在临时 table 中查找描述为 "A" 和 "B" 的记录,然后尝试将 A 除以 B。第一个规则测试是否存在A,如果它不存在,该过程应该停止。第二条规则测试 B 是否存在,如果不存在,则该过程应停止。第三条规则测试 B 不为 0,如果为 0,进程应该停止。最后,第4条规则用A除以B,判断结果是否大于1。

临时 table 包含:

A  20
B  5

结果:所有 4 条规则均已评估,最终结果 true

临时 table 包含:

A   20
B   0

结果:只有前 3 个规则 运行,没有除以 0 的错误,最终结果 false

临时 table 包含:

B   20
C   5

结果:只有第一条规则运行s,最终结果为假

我能看到的唯一设计方法是使用游标,或者更糟的是,使用动态 SQL。

所以我正在寻找设计建议。考虑以上只是一个例子(很多情况要复杂得多),这个过程是否可以设计成避免游标或动态SQL?递归可以解决吗?

更新:几天没有任何建议或输入。有人对为此使用 CTE 有意见吗?或者这只是一个为您处理了解除分配的游标?

有时,除了使用数据库游标之外,确实没有其他有效的选择。

这就是我所做的。它可以工作,并且性能和资源使用是合理的。这是一个仅本地静态的 firehose 转发,没有锁定我能想到的所有其他加速游标的东西,如果我以后遇到性能问题,我可以子集几个 joined/aliased tables (3 tables 被保留 joined/aliased 10 次)到一个 table 变量中,并在游标中使用它来进一步加速它。

我想知道为什么对游标的自动厌恶如此强烈,即使在没有实用替代品的情况下也是如此。