create procedure procTest1
@field_name nvarchar(20),
@value nvarchar(20),
@where_name nvarchar(20),
@tbl_name nvarchar(30),
@curOut cursor varying output
as
declare @str varchar(1000)
select @str='select '+@field_name+' from '+@tbl_name+
' where '+@where_name+'='+@value
set @curOut=cursor for @str
open @curOut
go--我想返回一个游标.而我又想用动态Sql.怎么写?
@field_name nvarchar(20),
@value nvarchar(20),
@where_name nvarchar(20),
@tbl_name nvarchar(30),
@curOut cursor varying output
as
declare @str varchar(1000)
select @str='select '+@field_name+' from '+@tbl_name+
' where '+@where_name+'='+@value
set @curOut=cursor for @str
open @curOut
go--我想返回一个游标.而我又想用动态Sql.怎么写?
@where_name+'='+@value)
open c1
fetch next from c1 into ...
@field_name nvarchar(20),
@value nvarchar(20),
@where_name nvarchar(20),
@tbl_name nvarchar(30),
@curOut cursor varying output
as
--declare @str varchar(1000)
declare @str nvarchar(2000)
--select @str='select '+@field_name+' from '+@tbl_name+' where '+@where_name+'='+@value
select @str=N'set @curOut = cursor for select '+@field_name+N' from '+@tbl_name+N' where '+@where_name+N'='+@value+char(10)+N'open @curOut'
exec sp_executesql @sql, N'@curOut cursor output', @curOut output
--set @curOut=cursor for @str
--open @curOut
go
不行哦.我试了你的代码.
我调用时出现了这些错误服务器: 消息 206,级别 16,状态 2,过程 procTest1,行 0
操作数类型冲突: cursor 与 nvarchar 不兼容
服务器: 消息 16950,级别 16,状态 2,行 9
当前没有为变量 '@cur' 分配游标。
服务器: 消息 16950,级别 16,状态 2,行 15
当前没有为变量 '@cur' 分配游标。
服务器: 消息 16950,级别 16,状态 2,行 16
当前没有为变量 '@cur' 分配游标。
怎么可能不行
*/create procedure procTest1
@field_name nvarchar(20)='name',
@value nvarchar(20)=1,
@where_name nvarchar(20)='id',
@tbl_name nvarchar(30)='sysobjects',
@curOut cursor varying output
as
--declare @str varchar(1000)
declare @str nvarchar(2000)
--select @str='select '+@field_name+' from '+@tbl_name+' where '+@where_name+'='+@value
select @str=N'set @curOut = cursor for select '+@field_name+N' from '+@tbl_name+N' where '+@where_name+N'='+@value+char(10)+N'open @curOut'
exec sp_executesql @str, N'@curOut cursor output', @curOut output
--set @curOut=cursor for @str
--open @curOut
go
declare @curOut cursor
exec procTest1 @curOut=@curOut output
fetch next from @curOut
close @curOut
deallocate @curOut
/*
name
---------
sysobjects
*/drop procedure procTest1