I SQL Server kan du använda något av följande fem sätt att returnera en lista med tillfälliga tabeller med Transact-SQL.
Dessa returnerar både lokala och globala tillfälliga tabeller.
Alternativ 1 – sys.tables
sys.tables
systemkatalogvyn är utformad speciellt för att returnera tabellinformation.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Som med alla vyer på den här sidan, eftersom vi vill ha information om tillfälligt tabeller måste vi fråga den här vyn i tempdb databas. Vi kan göra detta antingen genom att byta till den databasen först (så att det är vår nuvarande databas), eller genom att kvalificera vår fråga med databasnamnet.
I det här exemplet kvalificerar jag frågan med databasnamnet.
Alternativ 2 – sys.objects
Du kan också använda sys.objects
systemkatalogvy. Om du väljer det här alternativet måste du filtrera det efter typ så att endast användartabeller returneras.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
U
står för "User Table". Ett alternativt sätt att göra detta är att använda WHERE type_desc = 'USER_TABLE'
.
Alternativ 3 – INFORMATION_SCHEMA.TABLES
Om du vill ha ett ANSI-standardalternativ, använd INFORMATION_SCHEMA.TABLES
se. Om du väljer det här alternativet måste du också filtrera det efter typ så att endast "bastabeller" returneras.
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Alternativ 4 – sp_tables
Om du letar efter ett alternativ för lagrad procedur, sp_tables
lagrad procedur kommer att göra susen.
USE tempdb; EXEC sp_tables '#%';
Du kan också uttryckligen inkludera argumentnamnen.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Du kommer att märka att jag bytte till tempdb innan jag körde den här proceduren, även om jag angav databasen som ett av argumenten. Detta krävs faktiskt. @table_qualifier
argumentet måste matcha den aktuella databasen.
Observera också att @fUsePattern
mönstret måste vara 1 i det här fallet, eftersom jag använder en jokerteckenoperator i tabellnamnet. Ställer in den till 1
möjliggör mönstermatchning. Ställer in den på 0
skulle inaktivera mönstermatchning.
Alternativ 5 – dbo.sysobjects
Det här borde förmodligen inte vara ett alternativ, men jag listar det ändå. dbo.sysobjects
vy ingår endast i SQL Server för bakåtkompatibilitet. Den har markerats för utfasning och Microsoft avråder från att använda den. Om du stöter på det i din kod kan du kanske överväga att ändra det till något av de tidigare alternativen.
Hur som helst, så här ser det ut:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Om du undrar vad dubbelpunkten är till för (..
), är det ett snabbt sätt att ange standardschemat. I det här fallet är standardschemat dbo
, så vi kan också skriva följande:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';