2012/05/12

SQLServerのすごいやつ(隠しストアド編)

職場の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のすべてのテーブルの使用容量一覧が取得できる。

べんりー!