您的位置:首页 > 数据库

SQL SERVER 拼字符串方式 动态表名 游标变量范例

2011-04-14 01:34 295 查看
存储过程1:

CREATE PROCEDURE [dbo].[pro_get_cursor]
@In_TableName nvarchar(200),
@Out_CurrencyCursor CURSOR VARYING OUTPUT
AS
declare @sql nvarchar(2000)
set @sql=N'DECLARE CurrencyCursor CURSOR
FORWARD_ONLY STATIC FOR
SELECT * FROM '+@In_TableName
EXEC(@sql)
OPEN CurrencyCursor;
SET @Out_CurrencyCursor = CurrencyCursor;

存储过程2:(调用存储过程1)

CREATE PROCEDURE [dbo].[pro_test_c]
AS
BEGIN
DECLARE @MyCursor CURSOR;
declare @str1 varchar(100)
declare @str2 varchar(100)
declare @str3 varchar(100)
declare @str4 nvarchar(100)
declare @str5 nvarchar(100)
declare @i int=1
EXEC dbo.pro_get_cursor '表名',@Out_CurrencyCursor = @MyCursor OUTPUT;

FETCH NEXT FROM @MyCursor into @str1,@str2,@str3,@str4,@str5
WHILE (@@FETCH_STATUS = 0)
BEGIN;
print convert(nvarchar(5),@i)
set @i= @i+1
FETCH NEXT FROM @MyCursor into @str1,@str2,@str3,@str4,@str5
END;

CLOSE @MyCursor;
DEALLOCATE @MyCursor

--注意此处: 调用存储过程1的游标的不能再次CLOSE,只能催毁对像。否则异常发生。

--CLOSE CurrencyCursor
DEALLOCATE CurrencyCursor

--以下代码可以用来查看游标的列表

--DECLARE @Report CURSOR

-- Execute sp_cursor_list into the cursor variable.
--EXEC master.dbo.sp_cursor_list @cursor_return = @Report OUTPUT,
-- @cursor_scope = 3

---- Fetch all the rows from the sp_cursor_list output cursor.
--FETCH NEXT from @Report
--WHILE (@@FETCH_STATUS <> -1)
--BEGIN
-- FETCH NEXT from @Report
--END
--CLOSE @Report
--DEALLOCATE @Report

END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: