【发布时间】:2014-12-07 16:39:54
【问题描述】:
在 SQL Server 中,可以声明返回一个或多个结果集的存储过程:
CREATE PROCEDURE dbo.proc1
AS
SELECT 1 a, 2 b UNION SELECT 3 a, 4 b;
我正在考虑尝试从 SQL Server 2008+ 中的字典视图中检测所有此类存储过程。不幸的是,我似乎无法在任何一个中找到识别此类程序的独特标志:
INFORMATION_SCHEMA.ROUTINESsys.procedures
这里还有一个SQLFiddle,表明返回结果集的过程和不返回结果集的过程之间的元数据似乎没有区别。
可以以正式正确的方式完成(不寻找任何黑客/技巧)吗?如果有,怎么做?
【问题讨论】:
-
一种可能的解决方案是执行所有存储过程,将结果输出为其他语言,如
ruby,并在那里计算结果集。 -
是的,我知道这一点,但这并不是一个很好的解决方案,因为我什至不知道执行这些程序会引发什么副作用。
-
我同意这不是一个好的解决方案。对于一些存储过程,你还需要知道那里的参数。另一种可能的方式是解析存储过程,但是解析存储过程代码并不容易……
-
我认为你是对的。当然 sql server 不返回游标。 sql server 中的游标是 4 个字母的单词。 :D
-
我认为不可能;存储过程可以包含构造查询(或调用其他存储过程)并返回任意数量的结果(计数和游标)的动态 SQL。这意味着在编译时(创建或更改)无法确定是否(以及生成了多少)结果集。
标签: sql sql-server sql-server-2008 stored-procedures information-schema