- 締切済み
スラッシュ"/"で始まるテーブル名も、sp_spaceusedのループ処理に取り込みたい
お世話になります。はまってしまい、お知恵を貸して下さい。 SQL Server2000環境です。 データの月ごとの増加量が、想定よりも多いので、 各テーブルのサイズを出し、それをたし合わせることで、実際にテーブルが占める分を計算したいです。 下記の質問の答えを参考に、ストアドプロシージャにして実行しました。 http://okwave.jp/qa3291219.html ******************************************** declare cur cursor for select [name] from dbo.sysobjects where xtype='U'; declare @tableName nvarchar(1552) open cur; fetch next from cur into @tableName; WHILE @@FETCH_STATUS = 0 BEGIN exec('sp_spaceused ' + @tableName) FETCH NEXT FROM cur into @tableName; END; CLOSE cur; DEALLOCATE cur; ****************************************** ほとんどのテーブルについては、答えが得られるのですが、 スラッシュ始まりのテーブルは、構文エラーになってしまいます。 スラッシュ始まりのテーブルが100個近くあり、(/BDL/MSGLOG など) 出切ればループ処理に組み込みたいです。 スラッシュ始まりのテーブル1つに対しては、 'sp_spaceused' + '[テーブル名]' と、大カッコ・シングルクォーテーションで囲めば、テーブル名として処理できたのですが。。 スラッシュ始まりのテーブルについても、FETCHで一行ずつ処理してくれるようにするには、 どうしたらいいでしょうか? すみませんが、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- jamshid6
- ベストアンサー率88% (591/669)
#1です。おまけですが、カーソルでsp_spaceusedを繰り返し実行すると、 別々の結果で返されてくるので、まとめてみたいときなどは、テーブル変数を利用すると便利です。 今回のケースでは以下のようにします。 declare cur cursor for select [name] from dbo.sysobjects where xtype='U'; declare @tableName nvarchar(1552) declare @spaceused table ([name][nvarchar](128),[rows][char](11), [reserved][nvarchar](20),[data][nvarchar](20), [index_size][nvarchar](20),[unused][nvarchar](20)) open cur; fetch next from cur into @tableName; WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO @spaceused EXEC ('sp_spaceused [' + @tableName+']') FETCH NEXT FROM cur into @tableName; END; CLOSE cur; DEALLOCATE cur; select * from @spaceused;
- jamshid6
- ベストアンサー率88% (591/669)
exec('sp_spaceused ' + @tableName) を exec('sp_spaceused [' + @tableName +']') とするだけの話だと思いますが。。
お礼
ありがとうございます!! 無事、できました! 自分でも、+や大カッコ、シングルクォーテーションを使って囲むのは試していたのですが、余分なスペースなどが入っていたようです。。 正しく教えて頂き、大変助かりました!