日期:2014-05-18  浏览次数:20492 次

一个困扰了我几个月的问题: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