Chr*_*dge 4 t-sql stored-procedures cursor
由于遗留报告生成系统,我需要使用游标遍历存储过程的结果集.系统通过从结果集中的每一行打印数据来生成报告输出.重构报表系统超出了此问题的范围.
据我所知,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)
有什么想法吗?有没有人知道通过游标从存储过程遍历结果集的任何其他方法?
谢谢.
您可以将存储过程中的结果放入临时表中,然后从光标表中选择.
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
Run Code Online (Sandbox Code Playgroud)
另一种选择可能是将存储过程转换为表值函数.
DECLARE sample_cursor CURSOR
FOR
SELECT
Col1,
Col2
FROM
dbo.NewFunction('foo', 'bar')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14334 次 |
| 最近记录: |