W SQL Server możesz użyć dowolnego z następujących pięciu sposobów, aby zwrócić listę tabel tymczasowych przy użyciu języka Transact-SQL.
Zwracają one zarówno lokalne, jak i globalne tabele tymczasowe.
Opcja 1 – sys.tables
sys.tables
Widok katalogu systemowego został zaprojektowany specjalnie do zwracania informacji o tabeli.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Podobnie jak w przypadku wszystkich widoków na tej stronie, ponieważ potrzebujemy informacji o tymczasowym tabele, musimy wysłać zapytanie do tego widoku w tempdb Baza danych. Możemy to zrobić albo najpierw przełączając się do tej bazy danych (aby była to nasza aktualna baza danych), albo kwalifikując nasze zapytanie nazwą bazy danych.
W tym przykładzie kwalifikuję zapytanie nazwą bazy danych.
Opcja 2 – sys.objects
Możesz także użyć sys.objects
widok katalogu systemowego. Jeśli wybierzesz tę opcję, musisz przefiltrować ją według typu, aby zwracane były tylko tabele użytkowników.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
U
oznacza „Tabela użytkownika”. Alternatywnym sposobem na to jest użycie WHERE type_desc = 'USER_TABLE'
.
Opcja 3 – INFORMACJE_SCHEMA.TABELI
Jeśli potrzebujesz standardowej opcji ANSI, użyj INFORMATION_SCHEMA.TABLES
pogląd. Jeśli wybierzesz tę opcję, musisz również przefiltrować ją według typu, aby zwracane były tylko „tabele podstawowe”.
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Opcja 4 – sp_tables
Jeśli szukasz opcji procedury składowanej, sp_tables
procedura składowana załatwi sprawę.
USE tempdb; EXEC sp_tables '#%';
Możesz także jawnie dołączyć nazwy argumentów.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Zauważysz, że przełączyłem się na tempdb przed wykonaniem tej procedury, mimo że jako jeden z argumentów podałem bazę danych. To jest rzeczywiście wymagane. @table_qualifier
argument musi być zgodny z bieżącą bazą danych.
Zauważ również, że @fUsePattern
W tym przypadku wzorzec musi wynosić 1, ponieważ używam operatora wieloznacznego w nazwie tabeli. Ustawienie go na 1
umożliwia dopasowanie wzorców. Ustawienie go na 0
wyłączyłoby dopasowanie wzorców.
Opcja 5 – dbo.sysobjects
To prawdopodobnie nie powinno być opcją, ale i tak to wymienię. dbo.sysobjects
widok jest zawarty tylko w SQL Server w celu zapewnienia zgodności z poprzednimi wersjami. Został oznaczony jako przestarzały i Microsoft odradza jego używanie. Jeśli napotkasz go w swoim kodzie, może rozważ zmianę na jedną z poprzednich opcji.
W każdym razie wygląda to tak:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Jeśli zastanawiasz się, do czego służy podwójna kropka (..
), to szybki sposób na określenie domyślnego schematu. W tym przypadku domyślnym schematem jest dbo
, więc moglibyśmy również napisać:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';