sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server VIS TABELLER Tilsvarende

Nu og da finder jeg mig selv i at skrive VIS TABELLER i SQL Server og forventer at få en liste over tabeller.

Det ville give perfekt mening, hvis jeg brugte MySQL eller MariaDB. Men SQL Server/T-SQL har ikke en SHOW TABLES sætning som MySQL eller MariaDB, så det virker aldrig. Og jeg bliver ved med at glemme. Men heldigvis har SQL Server alternativer.

Her er fem muligheder for at få en liste over tabeller i SQL Server. Disse kan bruges, når du prøver at finde den undvigende VIS TABELLER sætning i SQL Server.

Mulighed 1 – sys.tables

sys.tables systemkatalogvisning er designet specifikt til at returnere brugertabeloplysninger:

SELECT name
FROM sys.tables;

Dette returnerer navnet på alle brugertabeller i den aktuelle database. Du kan skifte til den korrekte database ved at sætte USE foran sætningen hvor er navnet på den database, som du vil have opført for.

For eksempel returnerer følgende sætning alle brugertabeller fra KrankyKranes database:

USE KrankyKranes;
SELECT name
FROM sys.tables;

Du kan også returnere skemaet, hvis du vil:

SELECT 
    SCHEMA_NAME(schema_id) AS schema_name,
    name AS table_name
FROM sys.tables;

Her brugte jeg SCHEMA_NAME() funktion til at oversætte værdien af ​​schema_id kolonne ind i det faktiske navn på skemaet.

Mulighed 2 – sys.objects

Du kan også bruge sys.objects systemkatalogvisning. Hvis du vælger denne mulighed, kan du filtrere den efter type, så kun brugertabeller returneres:

SELECT name 
FROM sys.objects 
WHERE type = 'U';

Dette returnerer brugertabeller fra den aktuelle database. Denne visning indeholder også et schema_id kolonne, så du kan bruge SCHEMA_NAME() funktion til at oversætte det til skemanavnet, hvis det kræves.

Mulighed 3 – information_schema.tables

INFORMATION_SCHEMA.TABLES view returnerer én række for hver tabel eller visning i den aktuelle database, som den aktuelle bruger har tilladelser til.

Vi kan filtrere denne visning efter type, så kun basistabeller returneres:

SELECT 
    TABLE_SCHEMA,
    TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_TYPE = 'Base Table';

TABLE_SCHEMA kolonnen indeholder tabelskemanavnet, så vi behøver ikke bruge SCHEMA_NAME() funktion til at konvertere skema-id'et til dets navn.

Mulighed 4 – sp_tables

sp_tables lagret procedure returnerer en liste over objekter, der kan forespørges i det aktuelle miljø. Dette betyder enhver tabel eller visning, undtagen synonymobjekter.

Den hurtigste og nemmeste måde at kalde denne procedure på er sådan her:

sp_tables;

Men det kan returnere en lang liste af objekter.

Det er normalt bedre at være mere specifik. For eksempel:

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'KrankyKranes', 
    @table_type = "'TABLE'";

Her fortæller jeg proceduren for at vise brugertabeller i KrankyKranes database, der ejes af dbo .

@table_type argument accepterer en kommasepareret liste over værdier. Så hvis vi ville inkludere synspunkter, kunne vi gøre følgende:

EXEC sp_tables
    @table_owner = 'dbo', 
    @table_qualifier = 'Music', 
    @table_type = "'TABLE', 'VIEW'";

Mulighed 5 – dbo.sysobjects

Før SQL Server 2005 var dbo.sysobjects view var visningen til at vise tabeller og andre objekter.

Så hvis du bruger en gammel udgave af SQL Server, kan du gøre dette:

SELECT name 
FROM dbo.sysobjects
WHERE xtype = 'U';

  1. Logger du ALLE forespørgsler på en SQL Server 2008 Express-database?

  2. Advarsel:mysqli_query():Kunne ikke hente mysqli

  3. Hvorfor forespørgslen ikke gemmer i csv-fil, mens det virker normalt i postgresql-konsollen

  4. Oracle UTL_HTTP Post Multipart/Form-Data (JSON &ZIP) Eksempel