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