Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server SHOW TABLES-Äquivalent

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';