【问题标题】:T-SQL - execute procedure individual for each row of select statement needs cursor?T-SQL - 为每行选择语句单独执行过程需要游标吗?
【发布时间】:2018-02-09 13:38:42
【问题描述】:

我有一个表规则,其中包含动态 sql 语句。通过过程,可以将特定规则(计算)应用于表格。但现在我想在该表上应用所有规则(来自选择)。有没有办法在不使用游标的情况下做到这一点? 首先我尝试使用函数。但是那些不允许我执行动态 sql。所以我最终得到了过程和游标。

【问题讨论】:

  • 如果我理解您的问题,您是否希望为查询的每个结果执行一个存储过程?如果是这样,是的,必须用光标完成(至少,据我所知)。
  • 对,这就是问题所在。我希望找到一个更快的解决方案来加快速度,因为这些程序会经常执行。
  • 您可以构建一个包含所有规则和程序的动态T-SQL 语句并执行它。你能提供更多细节吗?你有什么——表名、过程和一些规则(输入参数)?
  • 这里没有足够的信息来提供真正的答案。也许您可以更改过程以接收表值参数而不是单个规则。也许您可以更改其他内容。就目前而言,这太模糊了,无法提供真正的答案。但是是的...我确信可以针对您的问题得出一个基于集合的解决方案。

标签: sql sql-server tsql cursor procedure


【解决方案1】:

据我怀疑,您在规则表中有一些文本,例如RuleID = 1,Rule = '(field1*field2)+field3'。所以你诉诸于动态sql来构建一个实际应用规则的语句。很公平,因为您无法处理该文本。这样是的,您可能不得不求助于游标并在每一行构建 sql + 执行。 如果规则不多且不是用户定义的,另一种解决方法是将规则转换为实际语句并在启用时应用连接。上面的例子是这样的:

SELECT 
...
,CASE WHEN RuleID = 1 THEN (field1*field2)+field3 ELSE NULL END AS Rule1Result
FROM mytable JOIN rulestable ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多