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