sql >> Database >  >> RDS >> Sqlserver

Retourneer een lijst met tabellen en weergaven in SQL Server met behulp van T-SQL (sp_tables)

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)

  1. WHERE IS NULL, IS NOT NULL of NO WHERE-clausule, afhankelijk van de parameterwaarde van SQL Server

  2. Optimalisatiedrempels - Gegevens groeperen en aggregeren, deel 2

  3. Is de OraOLEDB-provider in .NET onbetrouwbaar op CLOB-velden?

  4. Microsoft SQL Server 2012 Enterprise Edition met Service Pack 1 installeren