sql >> Base de Datos >  >> RDS >> Database

5 formas de listar tablas temporales usando T-SQL

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