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

Returner en liste over tabeller og visninger i SQL Server ved hjælp af T-SQL (sp_tables)

I SQL Server kan du bruge sp_tables systemlagret procedure for at få en liste over tabeller og visninger i det aktuelle miljø.

Du kan returnere alle tabeller og visninger, eller du kan indsnævre det til en bestemt ejer, type, mønster eller endda en bestemt tabel eller visning.

Syntaks

Syntaksen ser sådan ud:

sp_tables [ [ @table_name = ] 'name' ]   
     [ , [ @table_owner = ] 'owner' ]   
     [ , [ @table_qualifier = ] 'qualifier' ]   
     [ , [ @table_type = ] "type" ]   
     [ , [@fUsePattern = ] 'fUsePattern'];

Alle argumenter er valgfrie.

Eksempel 1 – Ingen argumenter

Du kan udføre denne lagrede procedure uden nogen argumenter. Hvis du gør dette, returneres alle tabeller og visninger i det aktuelle miljø.

Sådan:

EXEC sp_tables;

Dette returnerer over 500 rækker på mit system, så jeg vil ikke give resultaterne her. Ud over at returnere brugerdefinerede tabeller og visninger, returnerer den også systemobjekter, såsom sys og INFORMATION_SCHEMA tabeller og visninger.

Eksempel 2 – Alle argumenter

I den anden yderlighed er her et eksempel, der inkluderer alle argumenter. Dette indsnævrer resultaterne til et specifikt tabelnavn, en specifik type, en specifik kvalifikator og en specifik ejer.

EXEC sp_tables
  @table_name = 'Customers',
  @table_owner = 'Sales',
  @table_qualifier = 'WideWorldImporters',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Resultat:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

Eksempel 3 – Returner en specifik tabel

En nemmere måde at returnere en specifik tabel på er blot at bruge det første argument.

Sådan:

EXEC sp_tables @table_name = 'Customers';

Eller endnu mere kortfattet, som en af ​​disse:

EXEC sp_tables 'Customers';
sp_tables 'Customers';

Vær dog opmærksom på, at du kan få mere end én række. I dette eksempel returneres to rækker:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
| WideWorldImporters | Website       | Customers    | VIEW         | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

Den første række er til en tabel, og den anden række er til en visning.

Hvis jeg ikke var interesseret i at se nogen visninger eller systemtabeller, kunne jeg tilføje endnu et argument for at specificere tabeltypen.

Eksempel 4 – Returner en specifik tabeltype

Her forfiner jeg det forrige eksempel ved kun at angive den tabeltype, som jeg er interesseret i, sammen med tabellens navn.

EXEC sp_tables 
  @table_name = 'Customers',
  @table_type = "'TABLE'";

Resultat:

+--------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER    | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|--------------------+---------------+--------------+--------------+-----------|
| WideWorldImporters | Sales         | Customers    | TABLE        | NULL      |
+--------------------+---------------+--------------+--------------+-----------+

De acceptable typer inkluderer VIEW , TABLE , og SYSTEMTABLE .

Bemærk, at tabeltyper skal være store bogstaver.

Eksempel 5 – Returner flere tabeltyper

Du har måske bemærket, at syntaksen for tabeltypen bruger enkelte anførselstegn og dobbelte anførselstegn. Dette skyldes, at den accepterer en kommasepareret liste over tabeltyper. Hele listen er omgivet af dobbelte anførselstegn, og hvert listepunkt er omgivet af enkelte anførselstegn, med et komma, der adskiller hvert punkt.

Her er et eksempel på returnerende tabeltyper TABLE og VIEW .

EXEC sp_tables 
  @table_type = "'TABLE','VIEW'";

Bemærk, at hvis SET QUOTED_IDENTIFIER er ON , skal hvert enkelt anførselstegn fordobles, og hele parameteren skal være omgivet af enkelte anførselstegn.

Eksempel 6 – En note om tabelkvalifikationsargumentet

Hvis du bruger @table_qualifier argument, skal dets værdi være den samme som det aktuelle miljø, ellers får du en fejl. I SQL Server repræsenterer tabelkvalifikationen databasenavnet. I nogle produkter repræsenterer det servernavnet på tabellens databasemiljø.

Her er, hvad der sker i SQL Server, hvis jeg bruger en værdi, der er forskellig fra den aktuelle database:

USE Music;
EXEC sp_tables 
  @table_qualifier = 'WideWorldImporters';

Resultat:

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.

Eksempel 7 – Jokertegn

Du kan bruge @fUsePattern argument for at angive, om understregningen ( _ ), procent ( % ), og parentes ( [ eller ] )-tegn fortolkes som jokertegn. Gyldige værdier er 0 (mønstertilpasning er slået fra) og 1 (mønstertilpasning er slået til). Standardværdien er 1 .

Her er et eksempel på brug af mønstermatchning til at returnere tabelnavne, der begynder med bogstavet "A":

EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Resultat:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| Music             | dbo           | Albums       | TABLE        | NULL      |
| Music             | dbo           | Artists      | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Men her er, hvad der sker, hvis jeg deaktiverer mønstertilpasning:

EXEC sp_tables
  @table_name = 'A%',
  @table_type = "'TABLE'",
  @fUsePattern = 0;

Resultat:

(0 rows affected)

  1. Hvordan laver man en simpel fuzzy søgning kun med PostgreSQL?

  2. Sådan opretter du en databasemodel fra bunden

  3. Sådan fungerer Acosh() i PostgreSQL

  4. Arbejder dine medarbejdere på afstand? Sådan holder du dine data sikre.