Was ist der beste Weg, um die Namen aller Tabellen in einer bestimmten Datenbank in SQL Server abzurufen?
SQL Server 2005, 2008, 2012, 2014 oder 2016:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Nur Tabellen aus einer bestimmten Datenbank anzeigen
SELECT TABLE_NAME
FROM <DATABASE_NAME>.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
Oder,
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_CATALOG='dbName' --(for MySql, use: TABLE_SCHEMA='dbName' )
PS: Für SQL Server 2000:
SELECT * FROM sysobjects WHERE xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Hier ist eine Liste anderer Objekttypen, nach denen Sie auch suchen können:
SELECT * FROM INFORMATION_SCHEMA.TABLES
oder
SELECT * FROM Sys.Tables
select * from sys.tables;
ODER
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-Standard; wird in SQL Server 2005 weiterhin unterstützt.)
select * from sysobjects where xtype='U'
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'
Der Nachteil von INFORMATION_SCHEMA.TABLES
ist, dass es auch Systemtabellen wie dtproperties
und MSpeer_...
-Tabellen enthält, ohne dass diese von Ihren eigenen Tabellen unterschieden werden können.
Ich würde empfehlen, sys.objects
(die neue Version der veralteten sysobjects view) zu verwenden, die das Ausschalten der Systemtabellen unterstützt:
select *
from sys.objects
where type = 'U' -- User tables
and is_ms_shipped = 0 -- Exclude system tables
Um in SSMS alle vollständig qualifizierten Tabellennamen in einer bestimmten Datenbank abzurufen (z. B. "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]
Ergebnisse:
Bitte benutzen Sie diese. Sie erhalten Tabellennamen zusammen mit Schemanamen:
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
Dank an Ray Vega, dessen Antwort alle Benutzertabellen in einer Datenbank liefert ...
exec sp_msforeachtable 'print' '?' ''
sp_helptext zeigt die zugrunde liegende Abfrage, die zu ...
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
Nun können Sie verwenden sys.objects um alle Datenbankobjekte zu erhalten.
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
sie können zunächst einfach Ihre Datenbank auswählen
use database_name;
dann einfach tippen
show tables;
Mit SELECT * FROM INFORMATION_SCHEMA.COLUMNS
werden auch alle Tabellen und zugehörigen Spalten angezeigt.
--for Oracle
select tablespace_name, table_name from all_tables;
Dieser Link kann viel mehr Informationen dazu bieten topic