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)