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