事情是这样的,今天我想在存储过程中使用游标,但由于有动态数据,必须使用语句拼凑执行,但总出现问题,弄了半天无果,特来请教,请高手多多指点哈~
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;
------解决方案--------------------
给你一个微软提供的示范