1096 Stimmen

Wie bekomme ich eine Liste aller Tabellen in einer Datenbank mit TSQL?

Wie kann ich am besten die Namen aller Tabellen in einer bestimmten Datenbank auf SQL Server ermitteln?

2 Stimmen

4 Stimmen

Hat SHOW TABLES (wie in MySQL verwendet) funktionieren?

1699voto

ScottStonehouse Punkte 23245

SQL Server 2000, 2005, 2008, 2012, 2014, 2016, 2017 oder 2019:

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

So zeigen Sie nur Tabellen aus einer bestimmten Datenbank an

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'

49 Stimmen

Bitte beachten Sie, dass dies auch VIEWS einschließt, nicht nur Tabellen.

18 Stimmen

Fügen Sie den Datenbanknamen hinzu, wenn Sie nicht die spezifische Datenbank verwenden, so dass es SELECT TABLE_NAME FROM <DATABASE_NAME>.INFORMATION_SCHEMA.Tables lautet

24 Stimmen

Hinzufügen von WHERE TABLE_TYPE='BASE TABLE' nur Basistabellen einbezieht (und Sie könnten im weiteren Verlauf immer WHERE TABLE_TYPE != 'VIEW' ).

211voto

Micah Punkte 106323
SELECT sobjects.name
FROM sysobjects sobjects
WHERE sobjects.xtype = 'U'

Hier finden Sie eine Liste anderer Objekttypen, nach denen Sie ebenfalls suchen können:

  • AF: Aggregatfunktion (CLR)
  • C: CHECK-Beschränkung
  • D: Standard- oder DEFAULT-Beschränkung
  • F: FOREIGN KEY-Beschränkung
  • L: Log
  • FN: Skalarfunktion
  • FS: Montage (CLR) skalare Funktion
  • FT: Zusammenstellung (CLR) tabellenwertiger Funktion
  • WENN: Einzeilige Tabellenfunktion
  • IT: Interne Tabelle
  • P: Gespeicherte Prozedur
  • PC: Assembly (CLR) gespeicherte Prozedur
  • PK: PRIMARY KEY-Beschränkung (Typ ist K)
  • RF: Replikationsfilter gespeicherte Prozedur
  • S: Systemtabelle
  • SN: Synonym
  • SQ: Warteschlange
  • TA: Montage (CLR) DML-Auslöser
  • TF: Tabellenfunktion
  • TR: SQL DML-Auslöser
  • TT: Tischart
  • U: Benutzer-Tabelle
  • UQ: UNIQUE-Beschränkung (Typ ist K)
  • V: Ansicht
  • X: Erweiterte gespeicherte Prozedur

13 Stimmen

Das Aliasing ist ein wenig überflüssig: SELECT name FROM sysobjects WHERE xtype = 'U' würde das Gleiche tun.

0 Stimmen

Danke, zunächst versuchte ich dies mit mehreren Select-Anweisungen für PK,FK,D,C,V,UQ usw., um Quell- und Zieldatenbank zu vergleichen, aber dann fand ich este Funktion in VS, aber gibt es nicht eine sql query um die komplette Quell- und Zieldatenbank zu vergleichen?

0 Stimmen

Man fragt sich, warum 'U' wird verwendet, um die Benutzertabelle zu identifizieren... im Gegensatz zu vielleicht 'UT' oder die intuitivste, 'T' ...Na gut, das funktioniert!

120voto

StingyJack Punkte 18514
SELECT * FROM INFORMATION_SCHEMA.TABLES 

OU

SELECT * FROM Sys.Tables

6 Stimmen

Nur ein Hinweis, dass (wie in anderen Antworten erwähnt) sys.tables erst ab 2005 verfügbar ist

11 Stimmen

Das ist im Jahr 2018 kein Problem. Ich denke, das sollte höher sein :-)

34voto

Vikash Singh Punkte 784
USE YourDBName
GO 
SELECT *
FROM sys.Tables
GO

OU

USE YourDBName
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES 
GO

11voto

Rasoul Zabihi Punkte 2375
SELECT * FROM information_schema.tables
where TABLE_TYPE = 'BASE TABLE'

SQL Server 2012

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X