首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

在存储过程中使用游标的有关问题

2013-06-25 
在存储过程中使用游标的问题事情是这样的,今天我想在存储过程中使用游标,但由于有动态数据,必须使用语句拼

在存储过程中使用游标的问题
事情是这样的,今天我想在存储过程中使用游标,但由于有动态数据,必须使用语句拼凑执行,但总出现问题,弄了半天无果,特来请教,请高手多多指点哈~


CREATE PROCEDURE p_orderinfo
@age int,
@orderitem_cursor CURSOR VARYING OUTPUT
AS
DECLARE @sql VARCHAR(1000) 
SET @sql='SET @orderitem_cursor = CURSOR FOR SELECT name  FROM student WHERE age>'+CONVERT(VARCHAR,@age)+' ;';
EXEC(@sql);
--SET @orderitem_cursor = CURSOR FOR SELECT name FROM v_orderitem;
OPEN @orderitem_cursor;
GO
DROP PROCEDURE p_orderinfo;
--测试
DECLARE 
@orderitem_cursor CURSOR,
@name VARCHAR(20)
BEGIN
EXEC p_orderinfo 22,@orderitem_cursor OUTPUT;
FETCH NEXT FROM @orderitem_cursor INTO @name;
WHILE  @@FETCH_STATUS=0
BEGIN
SELECT @name;
FETCH NEXT FROM @orderitem_cursor INTO @name;
END;
CLOSE @orderitem_cursor;
DEALLOCATE @orderitem_cursor;
END;

报错如下:
消息 137,级别 15,状态 3,第 1 行
必须声明标量变量 "@orderitem_cursor"。
消息 16950,级别 16,状态 2,过程 p_orderinfo,第 7 行
目前没有为变量 '@orderitem_cursor' 分配游标。
消息 16950,级别 16,状态 2,第 5 行
目前没有为变量 '@orderitem_cursor' 分配游标。
消息 16950,级别 16,状态 2,第 12 行
目前没有为变量 '@orderitem_cursor' 分配游标。
消息 16950,级别 16,状态 2,第 13 行
目前没有为变量 '@orderitem_cursor' 分配游标。

请高手帮小弟一把 存储过程,游标,拼凑语句
[解决办法]

CREATE PROCEDURE p_orderinfo
@age int,
@orderitem_cursor CURSOR VARYING OUTPUT
AS
DECLARE @sql NVARCHAR(1000) 
declare @parmsDefine nvarchar(500)
set @parmsDefine=N'@_cursor CURSOR'
SET @sql=N'SET @_cursor = CURSOR FOR SELECT name  FROM student WHERE age>'+CONVERT(VARCHAR,@age)+' ;';
EXEC sp_executesql @sql,@parmsDefine,@_cursor=@orderitem_cursor;

--SET @orderitem_cursor = CURSOR FOR SELECT name FROM v_orderitem;
OPEN @orderitem_cursor;
GO

DROP PROCEDURE p_orderinfo;
--测试
DECLARE 
@orderitem_cursor CURSOR,
@name VARCHAR(20)

EXEC p_orderinfo 22,@orderitem_cursor OUTPUT;

FETCH NEXT FROM @orderitem_cursor INTO @name;
WHILE  @@FETCH_STATUS=0
BEGIN
SELECT @name;
FETCH NEXT FROM @orderitem_cursor INTO @name;
END;
CLOSE @orderitem_cursor;
DEALLOCATE @orderitem_cursor;

[解决办法]
引用:
Quote: 引用:

EXEC(@sql);

lz你的这句sql语句存在问题


我看了下你的代码,不知道exec 还有这种用法,就是后面带参数的那种,可不可以解释下?

给你一个微软提供的示范


USE AdventureWorks2008R2;
GO
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @SalesOrderNumber nvarchar(25);
DECLARE @IntVariable int;
SET @SQLString = N'SELECT @SalesOrderOUT = MAX(SalesOrderNumber)
    FROM Sales.SalesOrderHeader
    WHERE CustomerID = @CustomerID';
SET @ParmDefinition = N'@CustomerID int,
    @SalesOrderOUT nvarchar(25) OUTPUT';
SET @IntVariable = 22276;
EXECUTE sp_executesql
    @SQLString
    ,@ParmDefinition
    ,@CustomerID = @IntVariable
    ,@SalesOrderOUT = @SalesOrderNumber OUTPUT;
-- This SELECT statement returns the value of the OUTPUT parameter.
SELECT @SalesOrderNumber;
-- This SELECT statement uses the value of the OUTPUT parameter in
-- the WHERE clause.
SELECT OrderDate, TotalDue
FROM Sales.SalesOrderHeader
WHERE SalesOrderNumber = @SalesOrderNumber;

热点排行