没有这种语法吗?
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.怎么写?
------解决方案--------------------/*
怎么可能不行
*/
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