动态查询在SqlServer 2008存储过程中不使用游标

时间:2013-09-27 06:21:42

标签: sql sql-server sql-server-2008 stored-procedures

我正在Sql Server 2008中构建存储过程。存储过程有两个参数,它们是表的列名。在存储过程中,我使用动态查询在Cursor的帮助下获取这两列的数据。

代码:

    Create PROCEDURE TestSP
(
@firstAttribute nvarchar(max),
@secondAttribute nvarchar(max)
)
AS 
DECLARE @x FLOAT
DECLARE @y INT
DECLARE @query nvarchar(max)
DECLARE @cursor_query nvarchar(max)
DECLARE @result_Cursor as cursor

BEGIN
SET @query = 'Select '+ @firstAttribute+','+@secondAttribute+' from TBL_TEST_DATA_NEW'
SET @cursor_query =' set @cursor = cursor for ' + @query +' open @cursor;'

PRINT 'CURSOR_QUERY'+@cursor_query

exec sys.sp_executesql
    @cursor_query
    ,N'@cursor cursor output'
    ,@result_Cursor output

FETCH NEXT FROM result_Cursor INTO @x, @y

但是当我执行此SP时,它会给我以下错误

Msg 16916, Level 16, State 1, Procedure TestSP, Line 33
A cursor with the name 'result_Cursor' does not exist.

执行命令:

Exec TestSP "Column_1","Column_2"

有人能告诉我为什么会收到此错误

请帮助..

由于

3 个答案:

答案 0 :(得分:1)

错误是说Cursor不存在。你不能以“设置光标”开头。游标名称也没有@。

所以尝试使用

declare cursorNameHere cursor for SELECT ...
open cursorNameHere

答案 1 :(得分:1)

@result_Cursor是一个变量,只需将您的最后一行更改为

FETCH NEXT FROM @result_Cursor INTO @x, @y

参见 sql fiddle demo

上的示例

答案 2 :(得分:0)

更改

PRINT 'CURSOR_QUERY'+@cursor_query

PRINT 'CURSOR_QUERY '+@cursor_query