代码之家  ›  专栏  ›  技术社区  ›  Chris Judge

使用T-SQL通过游标导航存储过程的结果

  •  4
  • Chris Judge  · 技术社区  · 15 年前

    据我所知,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
    

    有什么想法吗?有人知道通过游标从存储过程遍历结果集的其他方法吗?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  8
  •   lnediger    15 年前

    您可以将存储过程中的结果放入临时表中,并从中选择光标。

    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')
    
        2
  •  1
  •   Remus Rusanu    15 年前
        3
  •  0
  •   Kevin LaBranche    15 年前

    您可以将SP执行到一个临时表中,然后使用光标在临时表上迭代

    创建表#temp(列)

    插入到#临时执行我的#存储的#进程。。。。

    升降台#温度