it-swarm.com.de

Wie bekomme ich eine Liste aller Tabellen in einer Datenbank, die TSQL verwendet?

Was ist der beste Weg, um die Namen aller Tabellen in einer bestimmten Datenbank in SQL Server abzurufen?

795
Ray Vega

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' 
1263
ScottStonehouse
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Hier ist eine Liste anderer Objekttypen, nach denen Sie auch suchen können:

  • AF: Aggregatfunktion (CLR)
  • C: CHECK-Einschränkung
  • D: Standard- oder DEFAULT-Einschränkung
  • F: FOREIGN KEY-Einschränkung
  • L: Log
  • FN: Skalarfunktion
  • FS: Assembly (CLR) -Skalarfunktion
  • FT: Assembly (CLR) -Tabellenwertfunktion
  • IF: Inline-Tabellenfunktion
  • IT: Interne Tabelle
  • P: Gespeicherte Prozedur
  • PC: Assembly (CLR) gespeicherte Prozedur
  • PK: PRIMARY KEY-Einschränkung (Typ ist K)
  • RF: Gespeicherte Prozedur des Replikationsfilters
  • S: Systemtabelle
  • SN: Synonym
  • SQ: Servicewarteschlange
  • TA: Assembly (CLR) DML-Trigger
  • TF: Tabellenfunktion
  • TR: SQL-DML-Trigger
  • TT: Tabellentyp
  • U: Benutzertabelle
  • UQ: UNIQUE-Einschränkung (Typ ist K)
  • V: Ansicht
  • X: Erweiterte gespeicherte Prozedur
185
Micah
SELECT * FROM INFORMATION_SCHEMA.TABLES 

oder

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

ODER 

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-Standard; wird in SQL Server 2005 weiterhin unterstützt.)

8
devio

select * from sysobjects where xtype='U'

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

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
4
Astrotrain

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:

  • MyDatabase.dbo.MyTable1 
  • MyDatabase.dbo.MyTable2
  • MyDatabase.MySchema.MyTable3 
  • MyDatabase.MySchema.MyTable4
  • usw.
2
Scott Software

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
2
vikashspeaks
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 
1
Frank

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

sie können zunächst einfach Ihre Datenbank auswählen

use database_name;

dann einfach tippen

show tables;
1
Erfan Ahmed

Mit SELECT * FROM INFORMATION_SCHEMA.COLUMNS werden auch alle Tabellen und zugehörigen Spalten angezeigt.

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

Dieser Link kann viel mehr Informationen dazu bieten topic

0
Demietra95