由于遗留的报告生成系统,我需要使用游标来遍历存储过程的结果集。系统通过打印结果集中每一行的数据来生成报告输出。重构报告系统远远超出了这个问题的范围。
据我所知,DECLARE CURSOR 语法要求其源是 SELECT 子句。但是,我需要使用的查询位于生成并执行动态 SQL 的 1000 多行存储过程中。
有谁知道如何将存储过程的结果集放入游标中?
我尝试了显而易见的方法:
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
有什么想法吗?有谁知道通过游标从存储过程遍历结果集的任何其他方法?
Thanks.
您可以将存储过程中的结果放入临时表中,然后从该表中为光标进行选择。
CREATE TABLE #myResults
(
Col1 INT,
Col2 INT
)
INSERT INTO #myResults(Col1,Col2)
EXEC my_Sp
DECLARE sample_cursor CURSOR
FOR
SELECT
Col1,
Col2
FROM
#myResults
另一种选择可能是将存储过程转换为表值函数。
DECLARE sample_cursor CURSOR
FOR
SELECT
Col1,
Col2
FROM
dbo.NewFunction('foo', 'bar')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)