I SQL Server kan du bruge en af følgende fem måder til at returnere en liste over midlertidige tabeller ved hjælp af Transact-SQL.
Disse returnerer både lokale og globale midlertidige tabeller.
Mulighed 1 – sys.tables
sys.tables
systemkatalogvisning er designet specifikt til at returnere tabeloplysninger.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Som med alle visninger på denne side, da vi ønsker information om midlertidige tabeller, skal vi forespørge på denne visning i tempdb database. Vi kan gøre dette enten ved at skifte til databasen først (så det er vores nuværende database), eller ved at kvalificere vores forespørgsel med databasenavnet.
I dette eksempel kvalificerer jeg forespørgslen med databasenavnet.
Mulighed 2 – sys.objects
Du kan også bruge sys.objects
systemkatalogvisning. Hvis du vælger denne mulighed, skal du filtrere den efter type, så kun brugertabeller returneres.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
U
står for "User Table". En alternativ måde at gøre dette på er at bruge WHERE type_desc = 'USER_TABLE'
.
Mulighed 3 – INFORMATION_SCHEMA.TABLER
Hvis du ønsker en ANSI-standardindstilling, skal du bruge INFORMATION_SCHEMA.TABLES
udsigt. Hvis du vælger denne mulighed, skal du også filtrere den efter type, så kun "basistabeller" returneres.
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Mulighed 4 – sp_tables
Hvis du leder efter en lagret procedure, skal du bruge sp_tables
lagret procedure vil gøre det trick.
USE tempdb; EXEC sp_tables '#%';
Du kan også eksplicit inkludere argumentnavnene.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Du vil bemærke, at jeg skiftede til tempdb før jeg udfører denne procedure, selvom jeg leverede databasen som et af argumenterne. Dette er faktisk påkrævet. @table_qualifier
argumentet skal matche den aktuelle database.
Bemærk også, at @fUsePattern
mønsteret skal være 1 i dette tilfælde, fordi jeg bruger en jokertegnoperator i tabelnavnet. Indstiller den til 1
muliggør mønstertilpasning. Indstiller den til 0
ville deaktivere mønstertilpasning.
Mulighed 5 – dbo.sysobjects
Dette burde nok ikke være en mulighed, men jeg vil liste det alligevel. dbo.sysobjects
view er kun inkluderet i SQL Server for bagudkompatibilitet. Det er blevet markeret til udfasning, og Microsoft fraråder at bruge det. Hvis du støder på det i din kode, kan du måske overveje at ændre det til en af de tidligere muligheder.
Under alle omstændigheder, sådan ser det ud:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Hvis du undrer dig over, hvad dobbeltprikken er til (..
), er det en hurtig måde at angive standardskemaet. I dette tilfælde er standardskemaet dbo
, så vi kunne også skrive følgende:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';