Using a cursor with dynamic SQL in a stored procedure

前端 未结 8 2234
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-29 21:37

I have a dynamic SQL statement I\'ve created in a stored procedure. I need to iterate over the results using a cursor. I\'m having a hard time figuring out the right syntax.

8条回答
  •  被撕碎了的回忆
    2020-11-29 22:08

    This code is a very good example for a dynamic column with a cursor, since you cannot use '+' in @STATEMENT:

    ALTER PROCEDURE dbo.spTEST
    AS
        SET NOCOUNT ON
        DECLARE @query NVARCHAR(4000) = N'' --DATA FILTER
        DECLARE @inputList NVARCHAR(4000) = ''
        DECLARE @field sysname = '' --COLUMN NAME
        DECLARE @my_cur CURSOR
        EXECUTE SP_EXECUTESQL
            N'SET @my_cur = CURSOR FAST_FORWARD FOR
                SELECT
                    CASE @field
                        WHEN ''fn'' then fn
                        WHEN ''n_family_name'' then n_family_name
                    END
                FROM
                    dbo.vCard
                WHERE
                    CASE @field
                        WHEN ''fn'' then fn
                        WHEN ''n_family_name'' then n_family_name
                    END
                    LIKE ''%''+@query+''%'';
                OPEN @my_cur;',
            N'@field sysname, @query NVARCHAR(4000), @my_cur CURSOR OUTPUT',
            @field = @field,
            @query = @query,
            @my_cur = @my_cur OUTPUT
        FETCH NEXT FROM @my_cur INTO @inputList
        WHILE @@FETCH_STATUS = 0
        BEGIN
            PRINT @inputList
            FETCH NEXT FROM @my_cur INTO @inputList
        END
        RETURN
    

提交回复
热议问题