sql-server - SQL Server“快捷方式”处理
问题描述
这是我要解决的问题的简化版本。
我有一个#MyData
包含 2 列的临时表:description
和value
.
我还有表MyRuleSequenceCollection
、MyRuleSequence
和MyRule
,我想用它们来评估临时表中的数据。 MyRuleSequence
是记录的有序列表MyRule
,并且MyRuleSequenceCollection
是记录的无序集合MyRuleSequence
。
其中一个序列在临时表中查找描述为“A”和“B”的记录,然后尝试将 A 除以 B。第一条规则测试 A 的存在,如果不存在,则该过程应该停止。第二条规则测试 B 的存在,如果它不存在,则该过程应该停止。第三条规则测试 B 不为 0,如果为 0,则停止进程。最后,第 4 条规则将 A 除以 B,并测试结果是否大于 1。
临时表包含:
一个 20 乙 5
结果:评估所有 4 条规则,最终结果true
临时表包含:
一个 20 0
结果:只运行前 3 条规则,没有除以 0 错误,最终结果false
临时表包含:
乙 20 C 5
结果:只运行第一条规则,最终结果为假
我能看到的唯一设计方法是使用游标,或者更糟糕的是,使用动态 SQL。
所以我正在寻找设计建议。考虑以上只是一个例子(许多情况要复杂得多),这个过程是否可以设计为避免游标或动态SQL?递归可以解决吗?
更新:几天没有任何建议或意见。有人对此使用 CTE 有意见吗?或者这只是一个为您处理释放的游标?
解决方案
有时,除了使用数据库游标之外,确实没有其他有效的选择。
这就是我所做的。它可以工作,并且性能和资源使用是合理的。这是一个只有本地静态的消防软管,没有锁定我能想到的所有其他东西来加速游标,如果我以后遇到性能问题,我可以子集几个连接/别名表(3 个表被连接/别名 10 次)进入一个表变量并在游标中使用它来进一步加快它。
我想知道为什么对光标的自动厌恶如此强烈,即使在没有实用替代方案的情况下也是如此。
推荐阅读
- python - 将 xarray 数据变量重新分配给 xarray 坐标
- java - jsoup 在尝试抓取 google 时返回太多请求错误
- r - flow_images_from_directory 保存增强图像
- javascript - 在 mongoose 中查询超过 X 分钟的文档
- jquery - jQuery - 仅允许数字和限制字符 - 突出显示文本时不起作用
- angular - Angular删除特定的表单验证器,而不是Formbuilder中的所有验证器
- reactjs - 反应组件中的 Typscript 可选参数
- salesforce - 使用 force:recordData 将记录添加到 Salesforce 中的 Campaign 对象
- excel - 如何将单元格或范围传递到 InStr?
- excel - .copy 在将当前工作簿复制到新工作簿时工作不一致