Beroende på vilken version av SQL Server du kör kan metoden för att fråga och returnera en lista över alla användarskapade tabeller skilja sig något. Nedan ska vi kort undersöka TSQL-satserna som kan användas för att hämta en tabelllista för både den äldre SQL Server 2000 och den nyare 2005-versionen eller senare.
Listtabeller i SQL Server 2000
För äldre versioner av SQL Server (som SQL Server 2000, även om den här metoden också stöds i SQL Server 2005 för bakåtkompatibilitet), måste du fråga SYS.SYSOBJECTS
metadatavy. SYS.SYSOBJECTS
innehåller en rad för varje objekt som har skapats i databasen, inklusive stored procedures
, views
och user tables
(som är viktiga att skilja från system tables
.)
SYSOBJECTS
Tabellen innehåller ett par dussin kolumner med data eftersom den måste innehålla information om praktiskt taget allt som läggs till servern över tid. Därför, för att hitta en lista med användarskapade tabeller (och därmed ignorera system tables
), måste vi hitta resultat där xtype
kolumn (som anger object type
för den raden) är lika med värdet U
, som står för user table
. Den resulterande TSQL-satsen bör se ut så här:
SELECT
*
FROM
SYSOBJECTS
WHERE
xtype = 'U';
GO
Obs! Sedan SYSOBJECTS
är en del av SYS
namnutrymme, när du frågar SYSOBJECTS
det är onödigt att ange att SYSOBJECTS
är en del av den globala SYS
namnutrymme, så vi kan utelämna det som visas i exemplet ovan.
Detta kommer att returnera en resultatlista med alla användarskapade tabeller. Eftersom mängden information som returneras när du frågar alla kolumner är ganska stor, kanske du vill trimma resultaten genom att bara se name
kolumnen och kanske crdate
(datum för skapande):
SELECT
name,
crdate
FROM
SYSOBJECTS
WHERE
xtype = 'U';
GO
Lista tabeller i SQL Server 2005 eller nyare
Att lista alla tabeller i SQL-servern när du använder en nyare version (SQL 2005 eller senare) är en fråga om att fråga INFORMATION_SCHEMA
vyer som automatiskt byggs in i SQL Server. Dessa låter dig enkelt se en mängd olika metadata för just den här SQL Server-instansen, inklusive information om COLUMNS
, ROUTINES
, och till och med TABLES
.
Du kanske märker att det returneras fyra kolumner när du använder INFORMATION_SCHEMA.TABLES
vy, men den viktigaste kolumnen är TABLE_TYPE
, som bestämmer om tabellen i den raden är en faktisk tabell (BASE TABLE
) eller en vy (VIEW
).
För att returnera alla tabeller och vyer i en fråga, kör följande TSQL-sats:
SELECT
*
FROM
INFORMATION_SCHEMA.TABLES;
GO
Det kan också vara klokt att ange vilken databas du vill fråga:
SELECT
*
FROM
databaseName.INFORMATION_SCHEMA.TABLES;
GO
Om du bara vill hämta faktiska tabeller och filtrera bort vyer från resultaten, lägg till en WHERE TABLE_TYPE = 'BASE TABLE'
klausul:
SELECT
*
FROM
databaseName.INFORMATION_SCHEMA.TABLES
WHERE
TABLE_TYPE = 'BASE TABLE';
GO