web-dev-qa-db-ja.com

TSQLを使用してデータベース内のすべてのテーブルのリストを取得する方法

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

812
Ray Vega

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

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' )

シモンズ:SQL Server 2000の場合:

SELECT * FROM sysobjects WHERE xtype='U' 
1263
ScottStonehouse
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

これはあなたが同様に検索することができる他のオブジェクトタイプのリストです:

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

または

SELECT * FROM Sys.Tables
74
StingyJack
select * from sys.tables;

または 

SELECT * FROM INFORMATION_SCHEMA.TABLES 

OR

SELECT * FROM sysobjects WHERE xtype='U'
29
sunilkuamr
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OR

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO
20
Vikash Singh
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

10
Rasoul Zabihi
exec sp_msforeachtable 'print ''?'''
9
Ray Vega
SELECT name 
FROM sysobjects 
WHERE xtype='U' 
ORDER BY name;

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

8
devio

select * from sysobjects where xtype='U'

6
spoulson
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U' 
5
Erikk Ross

INFORMATION_SCHEMA.TABLESのマイナス面は、dtpropertiesMSpeer_...テーブルなどのシステムテーブルも含まれていることです。自分のテーブルと区別することはできません。

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

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

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
Scott Software

これを使ってください。スキーマ名とともにテーブル名を取得します。

SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
2
vikashspeaks
SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE='BASE TABLE' 
ORDER BY TABLE_NAME

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
Frank

まああなたは使用することができます sys.objects すべてのデータベースオブジェクトを取得します。

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

OR

--  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
1
DarkRob

最初にデータベースを選択するだけです

use database_name;

それからちょうどタイプしなさい

show tables;
1
Erfan Ahmed

SELECT * FROM INFORMATION_SCHEMA.COLUMNSを使用すると、すべてのテーブルと関連列も表示されます。

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

このリンクはこれについてもっと多くの情報を提供することができます topic

0
Demietra95