我正在玩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 '='附近的语法不正确。)。
知道如何正确表达这个吗?
答案 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 ')