In SQL Server kunt u de sp_tables
. gebruiken systeem opgeslagen procedure om een lijst met tabellen en weergaven in de huidige omgeving te krijgen.
U kunt alle tabellen en weergaven retourneren, of u kunt het beperken tot een bepaalde eigenaar, type, patroon of zelfs een specifieke tabel of weergave.
Syntaxis
De syntaxis gaat als volgt:
sp_tables [ [ @table_name = ] 'name' ] [ , [ @table_owner = ] 'owner' ] [ , [ @table_qualifier = ] 'qualifier' ] [ , [ @table_type = ] "type" ] [ , [@fUsePattern = ] 'fUsePattern'];
Alle argumenten zijn optioneel.
Voorbeeld 1 – Geen argumenten
U kunt deze opgeslagen procedure zonder argumenten uitvoeren. Als u dit doet, worden alle tabellen en weergaven in de huidige omgeving geretourneerd.
Zoals dit:
EXEC sp_tables;
Dit levert meer dan 500 rijen op mijn systeem op, dus ik zal de resultaten hier niet geven. Naast het retourneren van door de gebruiker gedefinieerde tabellen en weergaven, retourneert het ook systeemobjecten, zoals de sys
en INFORMATION_SCHEMA
tabellen en weergaven.
Voorbeeld 2 – Alle argumenten
Aan het andere uiterste is hier een voorbeeld dat alle argumenten omvat. Dit beperkt de resultaten tot een specifieke tabelnaam, een specifiek type, een specifieke kwalificatie en een specifieke eigenaar.
EXEC sp_tables @table_name = 'Customers', @table_owner = 'Sales', @table_qualifier = 'WideWorldImporters', @table_type = "'TABLE'", @fUsePattern = 1;
Resultaat:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
Voorbeeld 3 – Een specifieke tabel retourneren
Een eenvoudigere manier om een specifieke tabel terug te geven, is door simpelweg het eerste argument te gebruiken.
Zoals dit:
EXEC sp_tables @table_name = 'Customers';
Of nog beknopter, zoals een van deze:
EXEC sp_tables 'Customers'; sp_tables 'Customers';
Houd er echter rekening mee dat u meer dan één rij kunt krijgen. In dit voorbeeld worden twee rijen geretourneerd:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | | WideWorldImporters | Website | Customers | VIEW | NULL | +--------------------+---------------+--------------+--------------+-----------+
De eerste rij is voor een tabel en de tweede rij is voor een weergave.
Als ik niet geïnteresseerd was in het zien van weergaven of systeemtabellen, zou ik nog een argument kunnen toevoegen om het tabeltype te specificeren.
Voorbeeld 4 – Geef een specifiek tabeltype terug
Hier verfijn ik het vorige voorbeeld door alleen het tabeltype op te geven waarin ik geïnteresseerd ben, samen met de naam van de tabel.
EXEC sp_tables @table_name = 'Customers', @table_type = "'TABLE'";
Resultaat:
+--------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |--------------------+---------------+--------------+--------------+-----------| | WideWorldImporters | Sales | Customers | TABLE | NULL | +--------------------+---------------+--------------+--------------+-----------+
De acceptabele typen zijn onder meer VIEW
, TABLE
, en SYSTEMTABLE
.
Houd er rekening mee dat tabeltypen hoofdletters moeten zijn.
Voorbeeld 5 – Meerdere tabeltypes retourneren
Het is je misschien opgevallen dat de syntaxis voor het tabeltype enkele aanhalingstekens gebruikt en dubbele aanhalingstekens. Dit komt omdat het een door komma's gescheiden lijst met tabeltypen accepteert. De hele lijst staat tussen dubbele aanhalingstekens en elk lijstitem staat tussen enkele aanhalingstekens, met een komma die elk item van elkaar scheidt.
Hier is een voorbeeld van terugkerende tabeltypes TABLE
en VIEW
.
EXEC sp_tables @table_type = "'TABLE','VIEW'";
Merk op dat als SET QUOTED_IDENTIFIER
is ON
, moet elk enkel aanhalingsteken worden verdubbeld en de hele parameter moet tussen enkele aanhalingstekens staan.
Voorbeeld 6 – Een opmerking over het tabelkwalificatieargument
Als u de @table_qualifier
. gebruikt argument, moet de waarde gelijk zijn aan de huidige omgeving, anders krijg je een foutmelding. In SQL Server vertegenwoordigt de tabelkwalificatie de databasenaam. In sommige producten vertegenwoordigt het de servernaam van de databaseomgeving van de tabel.
Dit is wat er gebeurt in SQL Server als ik een waarde gebruik die afwijkt van de huidige database:
USE Music; EXEC sp_tables @table_qualifier = 'WideWorldImporters';
Resultaat:
Msg 15250, Level 16, State 1, Procedure sp_tables, Line 86 The database name component of the object qualifier must be the name of the current database.
Voorbeeld 7 – Jokertekens
U kunt de @fUsePattern
. gebruiken argument om aan te geven of het onderstrepingsteken ( _
), procent ( %
), en haakje ( [
of ]
) tekens worden geïnterpreteerd als jokertekens. Geldige waarden zijn 0
(patroonovereenkomst is uitgeschakeld) en 1
(patroonafstemming is ingeschakeld). De standaardwaarde is 1
.
Hier is een voorbeeld van het gebruik van patroonovereenkomst om tabelnamen te retourneren die beginnen met de letter "A":
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 1;
Resultaat:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | Music | dbo | Albums | TABLE | NULL | | Music | dbo | Artists | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Maar dit is wat er gebeurt als ik patroonovereenkomst uitschakel:
EXEC sp_tables @table_name = 'A%', @table_type = "'TABLE'", @fUsePattern = 0;
Resultaat:
(0 rows affected)