sql >> Databasteknik >  >> RDS >> Database

5 sätt att lista tillfälliga tabeller med T-SQL

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 '#%';

  1. Hur tar jag bort ett fast antal rader med sortering i PostgreSQL?

  2. Vad är det bästa sättet att testa SQL Server-anslutning programmatiskt?

  3. Körs lagrade procedurer i databastransaktioner i Postgres?

  4. (engelska) Hur man använder Oracle Database 19c Pre-Built Developer VM