sql >> Databáze >  >> RDS >> Database

5 způsobů, jak zobrazit seznam dočasných tabulek pomocí T-SQL

V SQL Server můžete použít kterýkoli z následujících pěti způsobů, jak vrátit seznam dočasných tabulek pomocí Transact-SQL.

Tyto vrátí místní i globální dočasné tabulky.

Možnost 1 – sys.tables

Soubor sys.tables zobrazení systémového katalogu je navrženo speciálně pro vracení informací o tabulce.

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

Stejně jako u všech zobrazení na této stránce vidíme, jak chceme informace o dočasných tabulkách, musíme toto zobrazení dotazovat v tempdb databáze. Můžeme to udělat buď tak, že se nejprve přepneme na tuto databázi (aby to byla naše aktuální databáze), nebo kvalifikujeme náš dotaz názvem databáze.

V tomto příkladu kvalifikuji dotaz názvem databáze.

Možnost 2 – sys.objects

Můžete také použít sys.objects zobrazení katalogu systému. Pokud zvolíte tuto možnost, budete ji muset filtrovat podle typu, aby byly vráceny pouze uživatelské tabulky.

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

U znamená „tabulku uživatelů“. Alternativní způsob, jak toho dosáhnout, je použít WHERE type_desc = 'USER_TABLE' .

Možnost 3 – INFORMATION_SCHEMA.TABLES

Pokud chcete standardní možnost ANSI, použijte INFORMATION_SCHEMA.TABLES Pohled. Pokud zvolíte tuto možnost, budete ji muset také filtrovat podle typu, aby byly vráceny pouze „základní tabulky“.

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

Možnost 4 – sp_tables

Pokud hledáte možnost uložené procedury, sp_tables uložená procedura vystačí.

USE tempdb;
EXEC sp_tables '#%';

Můžete také explicitně zahrnout názvy argumentů.

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

Všimnete si, že jsem přešel na tempdb před provedením tohoto postupu, i když jsem jako jeden z argumentů dodal databázi. To je ve skutečnosti vyžadováno. @table_qualifier argument musí odpovídat aktuální databázi.

Všimněte si také, že @fUsePattern vzor musí být v tomto případě 1, protože v názvu tabulky používám zástupný operátor. Nastavení na 1 umožňuje porovnávání vzorů. Nastavení na 0 by deaktivovalo porovnávání vzorů.

Možnost 5 – dbo.sysobjects

Tato možnost by pravděpodobně neměla být, ale přesto ji uvedu. dbo.sysobjects view je zahrnut pouze v SQL Serveru kvůli zpětné kompatibilitě. Bylo označeno k ukončení podpory a Microsoft jej nedoporučuje používat. Pokud se s tím ve svém kódu setkáte, možná zvažte změnu na jednu z předchozích možností.

V každém případě to vypadá takto:

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

Pokud vás zajímá, k čemu je dvojitá tečka (.. ), je to rychlý způsob, jak určit výchozí schéma. V tomto případě je výchozí schéma dbo , takže bychom mohli napsat také následující:

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

  1. Frustrace SQLite onUpgrade().

  2. Chybějící indexy v MS SQL nebo optimalizace v žádném okamžiku

  3. PostgreSQL smaže veškerý obsah

  4. 10 hlavních důvodů, proč byste se měli učit SQL