職場のDBマスターに教えてもらったSQLServerの隠しストアド
exec sp_MSforeachtable @command1 = "select '?'"
ヘルプに乗ってないやつらしく、かつ便利なやつなので覚えとくといいよ、とアドバイスいただいた。
何ができるかというと。。。
sp_MSForeachtableで返されるのが、「スキーマ.テーブル名」の一覧
使い方としては、@command1で指定した文内の「?」に上記の「スキーマ.テーブル名」がはめ込まれる。
だから、全テーブルに一括でSQL文をブン投げたい場合に便利 らしい!!
たとえば、これ
CREATE TABLE #temp (
TABLE_NAME sysname,
rows sysname,
reserved sysname,
data varchar(32),
index_size varchar(254),
unused varchar(100)
)
INSERT INTO #temp EXEC sp_MSforeachtable @command1 = "sp_spaceused '?'"
SELECT * FROM #temp order by table_name
sp_spaceusedで引数に渡したテーブルの使用容量をとれるストアドだが、
これに、sp_MSforeachtableを挟むと、各テーブルのテーブル使用容量を取り出せる。
SQL文がsp_MSforeachtableで取得したテーブル分繰り返されるので、いったん仮想テーブルに詰めて抽出すると、実行したDBのすべてのテーブルの使用容量一覧が取得できる。
べんりー!
