2017-08-31 49 views
-3

我得到了一个带有动态sql语句的表规则。通过一个程序,一个特定的规则(计算)可以应用在一个表格上。但是现在我想要在该表上应用所有规则(来自select)。有没有办法做到这一点,而不使用游标? 首先我试着使用函数。但是这些不会让我执行动态SQL。所以我结束了程序和游标。T-SQL - 为select语句的每一行执行程序个人需要光标?

+0

如果我理解你的问题,你想要为每个查询结果执行一个存储过程?如果是这样,是的,这必须用光标完成(至少据我所知)。 – Siyual

+0

对,就是这个问题。我希望能找到更快的解决方案来加快速度,因为这些程序将会经常执行。 –

+2

您可以构建一个包含所有规则和过程并执行它的动态'T-SQL'语句。你能提供更多细节吗?你有什么 - 表名,程序和一些规则(输入参数)? – gotqn

回答

0

从我怀疑,你有一些规则表,例如RuleID = 1,Rule ='(field1 * field2)+ field3'。所以你诉诸动态SQL来建立一个声明实际上应用规则。很公平,因为没有别的东西可以处理这些文字。这种方式是的,你可能不得不求助于游标并在每一行建立sql + execute。 另一个解决方法是,如果规则不是很多而不是用户定义的,则会将规则转换为实际语句并在启用时使用联接应用。上面的例子会是这样的:

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