由于遗留报告生成系统,我需要使用游标来遍历存储过程的结果集。系统通过 PRINTing 结果集中每一行的数据来生成报告输出。重构报告系统超出了这个问题的范围。
据我所知,DECLARE CURSOR 语法要求其来源是 SELECT 子句。但是,我需要使用的查询存在于一个 1000 多行的存储过程中,该过程生成并执行动态 sql。
有谁知道将结果集从存储过程获取到游标中的方法?
我尝试了明显的:
Declare Cursor c_Data For my_stored_proc @p1='foo', @p2='bar'
作为最后的手段,我可以修改存储过程以返回它生成的动态 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
有什么想法吗?有谁知道通过游标从存储过程中遍历结果集的任何其他方法?
谢谢。