SQL Server上の特定のデータベースにあるすべてのテーブルの名前を取得するための最良の方法は何ですか?
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'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
これはあなたが同様に検索することができる他のオブジェクトタイプのリストです:
SELECT * FROM INFORMATION_SCHEMA.TABLES
または
SELECT * FROM Sys.Tables
select * from sys.tables;
または
SELECT * FROM INFORMATION_SCHEMA.TABLES
OR
SELECT * FROM sysobjects WHERE xtype='U'
USE YourDBName
GO
SELECT *
FROM sys.Tables
GO
OR
USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
GO
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'
SQL Server 2012
exec sp_msforeachtable 'print ''?'''
SELECT name
FROM sysobjects
WHERE xtype='U'
ORDER BY name;
(SQL Server 2000標準。まだSQL Server 2005でサポートされています。)
select * from sysobjects where xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
INFORMATION_SCHEMA.TABLES
のマイナス面は、dtproperties
やMSpeer_...
テーブルなどのシステムテーブルも含まれていることです。自分のテーブルと区別することはできません。
システムテーブルの除外をサポートする sys.objects
(非推奨の sysobjects viewの新しいバージョン)の使用をお勧めします。
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
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]
結果:
これを使ってください。スキーマ名とともにテーブル名を取得します。
SELECT SYSSCHEMA.NAME, SYSTABLE.NAME
FROM SYS.tables SYSTABLE
INNER JOIN SYS.SCHEMAS SYSSCHEMA
ON SYSTABLE.SCHEMA_ID = SYSSCHEMA.SCHEMA_ID
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
まああなたは使用することができます 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
最初にデータベースを選択するだけです
use database_name;
それからちょうどタイプしなさい
show tables;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
を使用すると、すべてのテーブルと関連列も表示されます。
--for Oracle
select tablespace_name, table_name from all_tables;
このリンクはこれについてもっと多くの情報を提供することができます topic