TSQLを使用してデータベース内のすべてのテーブルのリストを取得するにはどうすればよいですか?


895

SQL Server上の特定のデータベースにあるすべてのテーブルの名前を取得する最良の方法は何ですか?




3
DOES SHOW TABLES(MySQLの中で使用されるような)仕事?
マーティントーマ2017

回答:


1429

SQL Server 2000、2005、2008、2012、2014、2016、2017または2019:

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'

特定のデータベースのテーブルのみを表示するには

SELECT TABLE_NAME 
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE'

または、

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'BASE TABLE' 
    AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )

PS:SQL Server 2000の場合:

SELECT * FROM sysobjects WHERE xtype='U' 

46
これには、テーブルだけでなくVIEWSも含まれることに注意してください
Nathan Koop 2012

17
特定のデータベースを使用していない場合は、データベース名を追加して、SELECT TABLE_NAME FROM <DATABASE_NAME> .INFORMATION_SCHEMA.Tables
Shriroop

22
追加するWHERE TABLE_TYPE='BASE TABLE'と、ベーステーブルのみが含まれます(拡張機能を使用すると、常にを使用できますWHERE TABLE_TYPE != 'VIEW')。
フィリップコプリー2014

3
「sysdiagrams」もこのリストに表示されます:(
celsowm 2014年

4
sysdiagramsは通常のテーブルです。常にで手動で除外する必要がありAND name <> 'sysdiagrams'ます。
クリストフ

199
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

検索可能な他のオブジェクトタイプのリストを次に示します。

  • AF:集約関数(CLR)
  • C:CHECK制約
  • D:デフォルトまたはデフォルトの制約
  • F:FOREIGN KEY制約
  • L:ログ
  • FN:スカラー関数
  • FS:アセンブリ(CLR)スカラー関数
  • FT:アセンブリ(CLR)テーブル値関数
  • IF:インラインテーブル関数
  • IT:内部テーブル
  • P:ストアドプロシージャ
  • PC:アセンブリ(CLR)ストアドプロシージャ
  • PK:主キー制約(タイプはK)
  • RF:レプリケーションフィルターストアドプロシージャ
  • S:システムテーブル
  • SN:同義語
  • SQ:サービスキュー
  • TA:アセンブリ(CLR)DMLトリガー
  • TF:テーブル関数
  • TR:SQL DMLトリガー
  • TT:テーブルタイプ
  • U:ユーザーテーブル
  • UQ:UNIQUE制約(タイプはK)
  • V:ビュー
  • X:拡張ストアドプロシージャ

9
エイリアシングは少し冗長です:SELECT name FROM sysobjects WHERE xtype = 'U'同じことをします。
PJSCopeland 2015年

おかげで、最初にPK,FK,D,C,V,UQソースデータベースとターゲットデータベースを比較するために複数のselectステートメントを使用してこれを試しましたが、VSでこの機能を見つけましたが、sql query完全なソースデータベースとターゲットデータベースを比較する方法はありませんか?
shaijut

'U'ユーザーテーブルの識別になぜ使用されているのか不思議に思うかもしれませんが'UT'、多分、または最も直感的な方法とは対照的に'T'...ああ、これでうまくいきます!
user919426 2017年

87
SELECT * FROM INFORMATION_SCHEMA.TABLES 

または

SELECT * FROM Sys.Tables

5
(他の回答で述べたように)sys.tablesは2005年以降でのみ使用可能であることに注意してください
Rob

2
これは2018年の問題ではありません。これはもっと高いはずです:-)
Michal B.




9
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

(SQL Server 2000標準。SQLServer 2005でもサポートされています。)



6
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 

SELECT name FROM sysobjects WHERE xtype='U' AND name <> 'sysdiagrams'; Microsoft SQL Server Management Studioで作成されたsysdiagramsテーブルは、技術的にはシステムテーブルではなく、通常は除外したいテーブルだからです。
クリストフ

5

の欠点はINFORMATION_SCHEMA.TABLESdtpropertiesやテーブルなどのシステムテーブルも含まれており、MSpeer_...独自のテーブルと区別する方法がないことです。

システムテーブルの除外をサポートsys.objectsする(非推奨のsysobjectsビューの新しいバージョン) を使用することをお勧めします。

select *
from sys.objects
where type = 'U'      -- User tables
and is_ms_shipped = 0 -- Exclude system tables

2

SSMSで、特定のデータベース(たとえば、「MyDatabase」)内のすべての完全修飾テーブル名を取得するには:

SELECT [TABLE_CATALOG] + '.' + [TABLE_SCHEMA] + '.' + [TABLE_NAME]
FROM   MyDatabase.INFORMATION_SCHEMA.Tables
WHERE  [TABLE_TYPE] = 'BASE TABLE' and [TABLE_NAME] <> 'sysdiagrams'
ORDER BY [TABLE_SCHEMA], [TABLE_NAME]

結果:

  • MyDatabase.dbo.MyTable1
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3
  • MyDatabase.MySchema.MyTable4

2

こちらをご利用ください。スキーマ名とともにテーブル名を取得します。

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID

1
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

1

Ray Vegaのおかげで、データベースのすべてのユーザーテーブルが返されます...

exec sp_msforeachtable 'print' '?' ''

sp_helptextは、基になるクエリを示し、要約すると...

select * from dbo.sysobjects o 
join sys.all_objects syso on o.id =  syso.object_id  
where OBJECTPROPERTY(o.id, 'IsUserTable') = 1 
and o.category & 2 = 0 

1

sys.objectsを使用して、すべてのデータベースオブジェクトを取得できます。

 GO
 select * from sys.objects where type_desc='USER_TABLE' order by name
 GO

または

--  For all tables
select * from INFORMATION_SCHEMA.TABLES 
GO 

  --- For user defined tables
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='BASE TABLE'
GO

  --- For Views
select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE='VIEW'
GO

0
--for oracle
select tablespace_name, table_name from all_tables;

このリンクは、このトピックに関するより多くの情報を提供できます


2
これはSQL Server向けではないため、この質問に対する回答ではありません。
Dan Getz

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.