由于遗留报告生成系统,我需要使用游标遍历存储过程的结果集.系统通过从结果集中的每一行打印数据来生成报告输出.重构报表系统超出了此问题的范围.
据我所知,DECLARE CURSOR语法要求其源是SELECT子句.但是,我需要使用的查询存在于生成并执行动态sql的1000多行存储过程中.
有谁知道从存储过程到游标的结果集的方法?
我试过了明显的事:
Declare Cursor c_Data For my_stored_proc @p1='foo', @p2='bar'
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,我可以修改存储过程以返回它生成的动态sql而不是执行它,然后我可以将这个返回的sql嵌入到另一个字符串中,最后执行它.就像是:
Exec my_stored_proc @p1='foo', @p2='bar', @query='' OUTPUT
Set @sql = '
Declare Cursor c_Data For ' + @query + '
Open c_Data
-- etc. - cursor processing loop etc. goes here '
Exec @sql
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?有没有人知道通过游标从存储过程遍历结果集的任何其他方法?
谢谢.