Ab und zu tippe ich SHOW TABLES
ein in SQL Server, in der Erwartung, eine Liste von Tabellen zu erhalten.
Das würde absolut Sinn machen, wenn ich MySQL oder MariaDB verwenden würde. Aber SQL Server/T-SQL hat kein SHOW TABLES
Anweisung wie MySQL oder MariaDB, also funktioniert es nie. Und ich vergesse es immer wieder. Aber glücklicherweise hat SQL Server Alternativen.
Hier sind fünf Optionen zum Abrufen einer Liste von Tabellen in SQL Server. Diese können verwendet werden, wenn Sie versuchen, diese schwer fassbaren SHOW TABLES
zu finden -Anweisung in SQL Server.
Option 1 – sys.tables
Die sys.tables
Die Systemkatalogansicht wurde speziell für die Rückgabe von Benutzertabelleninformationen entwickelt:
SELECT name
FROM sys.tables;
Dies gibt den Namen aller Benutzertabellen in der aktuellen Datenbank zurück. Sie können zur richtigen Datenbank wechseln, indem Sie der Anweisung USE <database name>
voranstellen wobei <database name>
ist der Name der Datenbank, für die Sie Tabellen auflisten möchten.
Die folgende Anweisung gibt beispielsweise alle Benutzertabellen von KrankyKranes
zurück Datenbank:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Sie können das Schema auch zurückgeben, wenn Sie möchten:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Hier habe ich den SCHEMA_NAME()
verwendet Funktion, um den Wert der schema_id
zu übersetzen Spalte in den tatsächlichen Namen des Schemas.
Option 2 – sys.objects
Sie können auch die sys.objects
verwenden Systemkatalogansicht. Wenn Sie diese Option wählen, können Sie sie nach Typ filtern, sodass nur Benutzertabellen zurückgegeben werden:
SELECT name
FROM sys.objects
WHERE type = 'U';
Dies gibt Benutzertabellen aus der aktuellen Datenbank zurück. Diese Ansicht enthält auch eine schema_id
Spalte, sodass Sie SCHEMA_NAME()
verwenden können Funktion, um dies bei Bedarf in den Schemanamen zu übersetzen.
Option 3 – information_schema.tables
Die INFORMATION_SCHEMA.TABLES
view gibt eine Zeile für jede Tabelle oder Ansicht in der aktuellen Datenbank zurück, für die der aktuelle Benutzer Berechtigungen hat.
Wir können diese Ansicht nach Typ filtern, sodass nur Basistabellen zurückgegeben werden:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
Das TABLE_SCHEMA
Spalte enthält den Namen des Tabellenschemas, sodass wir SCHEMA_NAME()
nicht verwenden müssen Funktion, um die Schema-ID in ihren Namen umzuwandeln.
Option 4 – sp_tables
Die sp_tables
gespeicherte Prozedur gibt eine Liste von Objekten zurück, die in der aktuellen Umgebung abgefragt werden können. Dies bedeutet jede Tabelle oder Ansicht, mit Ausnahme von Synonymobjekten.
Der schnellste und einfachste Weg, diese Prozedur aufzurufen, ist wie folgt:
sp_tables;
Aber das kann eine lange Liste von Objekten zurückgeben.
Es ist normalerweise besser, genauer zu sein. Zum Beispiel:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Hier sage ich der Prozedur, Benutzertabellen in KrankyKranes
anzuzeigen Datenbank, die dbo
gehören .
Der @table_type
Das Argument akzeptiert eine durch Kommas getrennte Liste von Werten. Wenn wir also Ansichten einschließen wollten, könnten wir Folgendes tun:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Option 5 – dbo.sysobjects
Vor SQL Server 2005 wurden die dbo.sysobjects
view war die Ansicht zum Anzeigen von Tabellen und anderen Objekten.
Wenn Sie also eine alte Edition von SQL Server verwenden, können Sie Folgendes tun:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';