0

私は t-sql で遊んでいて、いくつかの変数を選択できるようにしたいと考えています。

現在、データベース内のすべてのテーブルのカウント(*)を取得して、これを印刷したいだけです。

次のことを試すと:

EXEC('SELECT COUNT(*) FROM '+ @テーブル名)

これにより、すべての行のカウントが得られます。ここで、COUNT(*) を変数に格納したいと思います。これを達成するために、私は宣言しました。私はいくつかの異なるアプローチを試しましたが、とりわけこれは次のとおりです。

EXEC('SELECT' + @row_count +' = COUNT(*) FROM '+ @テーブル名)

エラーが発生します (メッセージ 102、レベル 15、状態 1、行 1 '=' 付近の構文が正しくありません)。

これを正しく表現する方法はありますか?

4

5 に答える 5

2

を使用する必要がありますsp_executesql

詳細については、この記事を確認してください。

于 2012-05-10T12:57:27.613 に答える
1

There is a more efficient way to get the number of rows in a table, by looking at the database metadata. Here is an alternative solution:

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 に答える
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 に答える
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 に答える