在变量中选择一个值

时间:2012-05-10 12:54:23

标签: sql sql-server tsql

我正在玩t-sql并希望能够选择一些变量。

目前我只想为数据库中的每个表获取一个count(*)并打印出来。

当我尝试以下操作时:

  

EXEC('SELECT COUNT(*)FROM'+ @ table_name)

这给出了所有行的计数,现在,我想将COUNT(*)存储到变量中。为了达到这个目的,我已经宣布了。我尝试了一些不同的方法,其中包括这个方法:

  

EXEC('SELECT'+ @row_count +'= COUNT(*)FROM'+ @ table_name)

产生错误(Msg 102,Level 15,State 1,Line 1 '='附近的语法不正确。)。

知道如何正确表达这个吗?

5 个答案:

答案 0 :(得分:2)

您必须使用sp_executesql

查看this article了解详情。

答案 1 :(得分:1)

您需要从查询中提供输出变量,并指定它用于输出:

declare @table_name nvarchar(100)
declare @row_count int
declare @sql nvarchar(max)

set @table_name = 'YOUR TABLE NAME'

set @sql = N'SELECT @row_count = COUNT(*) FROM '+ @table_name
exec sp_executesql @sql, N'@row_count int output', @row_count = @row_count output
print @row_count

答案 2 :(得分:1)

通过查看数据库元数据,可以更有效地获取表中的行数。这是另一种解决方案:

declare @NumRows int;
select @NumRows = sum(rows)
from <database>.sys.partitions P join
     <database>.sys.tables T
      on T.[object_id] = P.[object_id]
where index_id IN (0,1) AND T.[type] = 'U' and t.name = '<table>'

答案 3 :(得分:0)

可能会这样:

declare @rowcount int  
declare @table_name nvarchar(10)
declare @sql nvarchar(max);
set @table_name = N'test';
set @sql = N'SELECT COUNT(*) FROM '+@table_name;
execute sp_executesql @sql,N'@rowcount int output',@rowcount = @rowcount output; 
select @rowcount; 

答案 4 :(得分:0)

必须在适当的上下文中声明变量。尝试

declare @table_name varchar(50)

set @table_name ='users'
EXEC('declare @rcnt int;SELECT @rcnt = COUNT(*) FROM '+ @table_name+';select @rcnt ')