一个存储过程的问题,请帮忙!急!!!!!
在存储过程里:
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)