Zo nu en dan typ ik SHOW TABLES
in SQL Server, in de verwachting een lijst met tabellen te krijgen.
Dat zou volkomen logisch zijn als ik MySQL of MariaDB zou gebruiken. Maar SQL Server/T-SQL heeft geen SHOW TABLES
statement zoals MySQL of MariaDB, dus het werkt nooit. En ik vergeet het steeds. Maar gelukkig heeft SQL Server wel alternatieven.
Hier zijn vijf opties voor het verkrijgen van een lijst met tabellen in SQL Server. Deze kunnen worden gebruikt wanneer je die ongrijpbare SHOW TABLES
probeert te vinden statement in SQL Server.
Optie 1 – sys.tables
De sys.tables
systeemcatalogusweergave is speciaal ontworpen voor het retourneren van gebruikerstabelinformatie:
SELECT name
FROM sys.tables;
Dit retourneert de naam van alle gebruikerstabellen in de huidige database. U kunt overschakelen naar de juiste database door de instructie vooraf te laten gaan met USE <database name>
waar <database name>
is de naam van de database waarvoor u tabellen wilt weergeven.
De volgende instructie retourneert bijvoorbeeld alle gebruikerstabellen uit de KrankyKranes
databank:
USE KrankyKranes;
SELECT name
FROM sys.tables;
Je kunt het schema ook retourneren als je wilt:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
Hier gebruikte ik de SCHEMA_NAME()
functie om de waarde van de schema_id
. te vertalen kolom in de werkelijke naam van het schema.
Optie 2 – sys.objects
U kunt ook de sys.objects
. gebruiken systeemcatalogus bekijken. Als u deze optie kiest, kunt u deze filteren op type zodat alleen gebruikerstabellen worden geretourneerd:
SELECT name
FROM sys.objects
WHERE type = 'U';
Dit retourneert gebruikerstabellen uit de huidige database. Deze weergave bevat ook een schema_id
kolom, zodat u de SCHEMA_NAME()
. kunt gebruiken functie om dat indien nodig in de schemanaam te vertalen.
Optie 3 – information_schema.tables
De INFORMATION_SCHEMA.TABLES
view retourneert één rij voor elke tabel of weergave in de huidige database waarvoor de huidige gebruiker machtigingen heeft.
We kunnen deze weergave op type filteren, zodat alleen basistabellen worden geretourneerd:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
De TABLE_SCHEMA
kolom bevat de naam van het tabelschema, dus we hoeven de SCHEMA_NAME()
niet te gebruiken functie om de schema-ID naar zijn naam te converteren.
Optie 4 – sp_tables
De sp_tables
opgeslagen procedure retourneert een lijst met objecten die in de huidige omgeving kunnen worden opgevraagd. Dit betekent elke tabel of weergave, behalve synoniemenobjecten.
De snelste en gemakkelijkste manier om deze procedure aan te roepen is als volgt:
sp_tables;
Maar dat kan een lange lijst met objecten opleveren.
Het is meestal beter om specifieker te zijn. Bijvoorbeeld:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
Hier vertel ik de procedure om gebruikerstabellen te tonen in de KrankyKranes
database die eigendom zijn van dbo
.
De @table_type
argument accepteert een door komma's gescheiden lijst met waarden. Dus als we weergaven willen opnemen, kunnen we het volgende doen:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
Optie 5 – dbo.sysobjects
Vóór SQL Server 2005 waren de dbo.sysobjects
weergave was de weergave voor het tonen van tabellen en andere objecten.
Dus als u een oude versie van SQL Server gebruikt, kunt u dit doen:
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';