一个困扰了我几个月的问题:SQL存储过程问题
1 create PROCEDURE UP_Pubs_Test
2 AS
3 Declare @SqlStr varchar(1000)
4 Declare @cntRec int
5 set @SqlStr = 'select @cntRec=count(*) from title'
6 exec (@SqlStr)
7 select @cntRec
在这个存储过程中,我想把变量@cntRec中的值传出,但是无法取出,虽然第6句可以执行,但第7句却不能执行,请教各位高手帮忙解决。
注意:为了问题的简化,我已经省略一部分,但变量@cntRec一定是在一个SQL语句中,也就是说第5句中@SqlStr不能变,第6句不能省略。
------解决方案--------------------set @SqlStr = 'select @cntRec=count(*) from title '
exec (@SqlStr)
select @cntRec
--用過的一個笨方法。。。看看要不要用
==>
create table #(num int)
set @SqlStr = 'select count(*) from title '
insert into # exec(@sqlStr)
select @cntRec =num from #
select @cntRec
------解决方案--------------------1 create PROCEDURE UP_Pubs_Test
2 AS
3 Declare @SqlStr varchar(1000)
4 Declare @cntRec int
5 select @cntRec=count(*) from title
6 --exec (@SqlStr)
7 select @cntRec
------解决方案--------------------create PROCEDURE UP_Pubs_Test
AS
Declare @SqlStr nvarchar(1000)
Declare @cntRec int
set @SqlStr = N'select @cntRec=count(*) from title '
exec sp_executesql @SqlStr,N'@cntRec int output',@cntRec output
select @cntRec
------解决方案--------------------5楼不是告诉你用sp_executesql方法传出么?
------解决方案--------------------SQL code
declare @cntRec int
declare @SqlStr nvarchar(1000)
declare @where1 nvarchar(100)
declare @where2 nvarchar(100)
set @where1='id=object_id(''sysobjects'')'
set @where2='name<>''id'''
set @SqlStr='select @cntRec=count(*) from syscolumns where '+@where1+' and '+@where2
--@SqlStr隨便你組裝,下面第二行定義輸出參數,第三行用外面的@cntRec接收輸出數據。
exec sp_executesql @SqlStr,
N'@cntRec int output',
@cntRec output
select @cntRec