sql >> Database teknologi >  >> RDS >> Database

5 måder at liste midlertidige tabeller ved hjælp af T-SQL

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

  1. Få den første dag i måneden i PostgreSQL

  2. Sådan fungerer TRIM() i MariaDB

  3. SINH() Funktion i Oracle

  4. Sådan fungerer OBJECTPROPERTYEX() i SQL Server