0

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

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

当我尝试以下操作时:

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

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

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

这会产生错误(消息 102,级别 15,状态 1,行 1 '=' 附近的语法不正确。)。

知道如何正确表达这一点吗?

4

5 回答 5

2

你必须使用sp_executesql.

查看这篇文章了解更多信息。

于 2012-05-10T12:57:27.613 回答
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
于 2012-05-10T12:59:33.617 回答
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>'
于 2012-05-10T13:13:07.990 回答
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; 
于 2012-05-10T12:58:34.337 回答
0

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

declare @table_name varchar(50)

set @table_name ='users'
EXEC('declare @rcnt int;SELECT @rcnt = COUNT(*) FROM '+ @table_name+';select @rcnt ')
于 2012-05-10T13:01:21.273 回答