用游标变量即可, 参考下述示例DECLARE @sql nvarchar(4000)-- 游标查询语句 SELECT @sql = N' SELECT * FROM sys.objects'-- 游标处理 DECLARE @tb CURSOR SELECT @sql = N' SET @tb = CURSOR LOCAL FOR ' + @sql + N' OPEN @tb ' EXEC sp_executesql @sql, N'@tb CURSOR OUTPUT', @tb OUTPUT-- 游标循环 FETCH @tb WHILE @@FETCH_STATUS = 0 BEGIN FETCH @tb END CLOSE @tb DEALLOCATE @tb
@sql nvarchar(4000)-- 游标查询语句
SELECT
@sql = N'
SELECT * FROM sys.objects'-- 游标处理
DECLARE
@tb CURSOR
SELECT
@sql = N'
SET @tb = CURSOR LOCAL
FOR
' + @sql + N'
OPEN @tb
'
EXEC sp_executesql @sql, N'@tb CURSOR OUTPUT', @tb OUTPUT-- 游标循环
FETCH @tb
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH @tb
END
CLOSE @tb
DEALLOCATE @tb
还有 EXEC sp_executesql @sql, N'@tb CURSOR OUTPUT', @tb OUTPUT
中的OUTPUT是什么意思?
OUTPUT表示输出参数
跟在老大后面,弱弱的贴一下
declare @sql varchar(100)
set @sql='select * from tablename'
exec('declare cur cursor for '+@sql)
open cur
--下面跟正常使用时一样