首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个存储过程的有关问题,请帮忙!

2012-02-03 
一个存储过程的问题,请帮忙!急!!!!!在存储过程里:createprocproc_test@tabNamevarchar(100)asdeclare@rowC

一个存储过程的问题,请帮忙!急!!!!!
在存储过程里:
create   proc   proc_test
@tabName   varchar(100)
as
declare   @rowCounts   int
select   @rowCounts   =   count(*)   from   @tabName
print   @rowCounts

exec   proc_test   'users '

执行时会报错,说必须声明变量@tabName
如果我将count(*)   from   @tabName   改为   count(*)   from   users   则可以通过
请问这是为什么呢?如何解决这个问题。
急需解决,谢谢!!!!!!!

[解决办法]
--try

create proc proc_test
@tabName varchar(100)
as
exec( '
declare @rowCounts int
select @rowCounts = count(*) from '+@tabName+ '
print @rowCounts
')
[解决办法]
--or

create proc proc_test
@tabName varchar(100)
as
declare @rowCounts int, @sql nvarchar(4000)
set @sql= 'select @rowCounts = count(*) from '+@tabName
exec sp_executesql @sql, N '@rowCounts int output ', @rowCounts output
print @rowCounts
[解决办法]
select子句中的from后面的词语必须是表名,并且不能是变量;
执行动态语句查询时,必须使用exec或者sp_executeSql存储过程。
exec( 'select * from '+@tabname)
set @RowCounts = @@Rowcount
[解决办法]
用select赋值时,from后的表名如果是变量就会出这问题。
一般采用以字符串的形式用exec来执行躲避此问题.
[解决办法]
create proc proc_test
@tabName varchar(100)
as
declare @s
set @s= 'select count(*) from '@tabName
exec (@s)

热点排行