データベース内の全テーブル (table) を取得する

データベース内の全テーブル (table) を取得するには?

データベース内の全テーブル (table) の一覧を取得したり、テーブルの名前の一部を指定して、検索したりしたいような時があるかもしれません。

何通りか方法があるので、データベース内のユーザが定義した全テーブルの一覧を取得するスクリプトをご紹介します。


データベース内の全テーブル (table) を取得する

まず、sys.tables というシステムカタログビューから現在のデータベース内のユーザー定義テーブルの一覧を取得することができます。

テーブル一覧を取得したいデータベースを選択して、以下のクエリーを実行します。

SELECT	S.name AS SchemaName,
	T.name AS TableName
FROM	sys.tables AS T
	   INNER JOIN sys.schemas AS S
	      ON T.schema_id = S.schema_id
ORDER BY S.name,
	 T.name;

データベース内の全テーブル (table) を取得する 1


これを使って、例えば、テーブル名に Person が入るテーブルの一覧を取得したい時は次のようにできます。

SELECT	S.name AS SchemaName,
	T.name AS TableName
FROM	sys.tables AS T
	   INNER JOIN sys.schemas AS S
	      ON T.schema_id = S.schema_id
WHERE	T.name LIKE '%Person%'
ORDER BY S.name,
	 T.name;

データベース内の全テーブル (table) を取得する 2


先ほどの sys.tables は、sys.objects というシステムカタログビューからユーザーテーブルのみをフィルターして、テーブル情報のカラムを何個か足したものなので、以下のようにしてもユーザー定義のテーブルの一覧を取得することができます。

sys.objects の type = 'U' がユーザー定義のテーブルです。

SELECT	S.name AS SchemaName,
	O.name AS TableName
FROM	sys.objects AS O
	   INNER JOIN sys.schemas AS S
	      ON O.schema_id = S.schema_id
WHERE	type = 'U' -- U = Table (user-defined)
ORDER BY S.name,
	 O.name;

データベース内の全テーブル (table) を取得する 3


他には、INFORMATION_SCHEMA.TABLES というシステムインフォメーションスキーマービューでも、テーブルの一覧を取得できます。

ユーザー定義のテーブルの情報を取得したい時は TABLE_TYPE = 'BASE TABLE' を指定します。

SELECT	TABLE_SCHEMA,
	TABLE_NAME
FROM	INFORMATION_SCHEMA.TABLES
WHERE	TABLE_TYPE = 'BASE TABLE'
ORDER BY TABLE_SCHEMA,
	 TABLE_NAME;

データベース内の全テーブル (table) を取得する 4


いろいろ方法はありますが、テーブルのスキーマと名前だけが必要な時はどれを使っても良いと思います。 残りのカラムが違いますので、必要に応じて確認してください。

どの方法でも、現在のユーザーにパーミッションがある table しか取得できませんので、十分権限のあるユーザーでログインして実行してくださいね。


以上、データベース内のユーザが定義した全テーブルの一覧を取得するスクリプトをご紹介しました。

© 2010-2024 SQL Server 入門