En SQL Server, puede usar cualquiera de las siguientes cinco formas de devolver una lista de tablas temporales usando Transact-SQL.
Estos devuelven tablas temporales locales y globales.
Opción 1:sys.tables
Las sys.tables
La vista de catálogo del sistema está diseñada específicamente para devolver información de tablas.
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
Al igual que con todas las vistas en esta página, ya que queremos información sobre temporal tablas, necesitamos consultar esta vista en tempdb base de datos. Podemos hacer esto cambiando primero a esa base de datos (para que sea nuestra base de datos actual) o calificando nuestra consulta con el nombre de la base de datos.
En este ejemplo, califico la consulta con el nombre de la base de datos.
Opción 2:sys.objetos
También puede usar sys.objects
vista del catálogo del sistema. Si elige esta opción, deberá filtrarla por tipo para que solo se devuelvan las tablas de usuario.
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
La U
significa "Tabla de usuario". Una forma alternativa de hacer esto es usar WHERE type_desc = 'USER_TABLE'
.
Opción 3:INFORMACIÓN_ESQUEMA.TABLAS
Si desea una opción estándar ANSI, use INFORMATION_SCHEMA.TABLES
vista. Si elige esta opción, también deberá filtrarla por tipo para que solo se devuelvan "tablas base".
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
Opción 4:sp_tables
Si está buscando una opción de procedimiento almacenado, sp_tables
el procedimiento almacenado hará el truco.
USE tempdb; EXEC sp_tables '#%';
También puede incluir explícitamente los nombres de los argumentos.
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
Notarás que cambié a tempdb antes de ejecutar este procedimiento, aunque proporcioné la base de datos como uno de los argumentos. Esto es realmente necesario. El @table_qualifier
el argumento debe coincidir con la base de datos actual.
También tenga en cuenta que @fUsePattern
el patrón debe ser 1 en este caso, porque estoy usando un operador comodín en el nombre de la tabla. Configurándolo en 1
permite la coincidencia de patrones. Configurándolo en 0
deshabilitaría la coincidencia de patrones.
Opción 5:dbo.sysobjects
Esto probablemente no debería ser una opción, pero lo enumeraré de todos modos. Los dbo.sysobjects
view solo se incluye en SQL Server para compatibilidad con versiones anteriores. Se ha marcado como obsoleto y Microsoft desaconseja su uso. Si lo encuentra en su código, tal vez considere cambiarlo a una de las opciones anteriores.
En cualquier caso, esto es lo que parece:
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
Si te preguntas para qué sirve el punto doble (..
), es una forma rápida de especificar el esquema predeterminado. En este caso, el esquema predeterminado es dbo
, por lo que también podríamos escribir lo siguiente:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';