sql >> Database >  >> RDS >> Database

5 manieren om tijdelijke tabellen weer te geven met T-SQL

In SQL Server kunt u een van de volgende vijf manieren gebruiken om een ​​lijst met tijdelijke tabellen te retourneren met Transact-SQL.

Deze geven zowel lokale als globale tijdelijke tabellen terug.

Optie 1 – sys.tables

De sys.tables systeemcatalogusweergave is speciaal ontworpen voor het retourneren van tabelinformatie.

SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#%';

Zoals bij alle weergaven op deze pagina, aangezien we informatie willen over tijdelijke tabellen, moeten we deze weergave opvragen in de tempdb databank. We kunnen dit doen door eerst naar die database over te schakelen (zodat het onze huidige database is), of door onze zoekopdracht te kwalificeren met de databasenaam.

In dit voorbeeld kwalificeer ik de query met de databasenaam.

Optie 2 – sys.objects

U kunt ook de sys.objects . gebruiken systeemcatalogus bekijken. Als u deze optie kiest, moet u deze op type filteren, zodat alleen gebruikerstabellen worden geretourneerd.

SELECT name 
FROM tempdb.sys.objects
WHERE type = 'U';

De U staat voor "Gebruikerstabel". Een alternatieve manier om dit te doen is om WHERE type_desc = 'USER_TABLE' te gebruiken .

Optie 3 – INFORMATION_SCHEMA.TABLES

Als u een ANSI-standaardoptie wilt, gebruikt u de INFORMATION_SCHEMA.TABLES weergave. Als u deze optie kiest, moet u deze ook op type filteren, zodat alleen 'basistabellen' worden geretourneerd.

SELECT TABLE_NAME
FROM TempDB.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';

Optie 4 – sp_tables

Als u op zoek bent naar een opgeslagen procedure-optie, de sp_tables opgeslagen procedure zal het lukken.

USE tempdb;
EXEC sp_tables '#%';

U kunt ook expliciet de argumentnamen opnemen.

USE tempdb;
EXEC sp_tables 
  @table_name = '#%',
  @table_owner = 'dbo',
  @table_qualifier = 'tempdb',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Je zult merken dat ik ben overgestapt op tempdb voordat ik deze procedure uitvoerde, ook al heb ik de database als een van de argumenten opgegeven. Dit is echt nodig. De @table_qualifier argument moet overeenkomen met de huidige database.

Merk ook op dat de @fUsePattern patroon moet in dit geval 1 zijn, omdat ik een wildcard-operator in de tabelnaam gebruik. Instellen op 1 maakt patroonafstemming mogelijk. Instellen op 0 zou patroonovereenkomst uitschakelen.

Optie 5 – dbo.sysobjects

Dit zou waarschijnlijk geen optie moeten zijn, maar ik zal het toch opsommen. De dbo.sysobjects view is alleen opgenomen in SQL Server voor achterwaartse compatibiliteit. Het is gemarkeerd voor afschrijving en Microsoft raadt het gebruik ervan af. Als je het in je code tegenkomt, overweeg dan om het te wijzigen in een van de vorige opties.

In ieder geval, zo ziet het eruit:

SELECT name
FROM tempdb..sysobjects
WHERE name LIKE '#%';

Als je je afvraagt ​​waar de dubbele punt voor is (.. ), is het een snelle manier om het standaardschema op te geven. In dit geval is het standaardschema dbo , dus we zouden ook het volgende kunnen schrijven:

SELECT name
FROM tempdb.dbo.sysobjects
WHERE name LIKE '#%';

  1. Essentiële PostgreSQL-bewaking - Deel 3

  2. Voortgang bij online upgrade

  3. Een kolom hernoemen in SQL

  4. MySQL High Availability Framework uitgelegd – Deel I:Inleiding