SqlHints.com

Muchas veces nos encontramos con un escenario en el que necesitamos ejecutar algún código en función de si existe una tabla o no. Hay diferentes formas de identificar la existencia de la tabla en Sql Server, en este artículo se enumerarán los diferentes enfoques que se usan comúnmente y sus pros y contras. Prefiero usar la función OBJECT_ID () ya que es fácil de recordar. Hazme saber qué enfoque utilizas y la razón del mismo.

Para demostrar estos diferentes enfoques, creemos una base de datos de muestra con una tabla mediante el siguiente script:

CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))

¿Cómo comprobar si existe una tabla temporal en Sql Server?

Enfoque 1: Uso de INFORMATION_SCHEMA.Vista DE TABLAS

Podemos escribir una consulta como la siguiente para comprobar si existe una tabla de clientes en la base de datos actual.

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

RESULTADO:
Comprobar la existencia de la tabla Utilizando la vista INFORMATION_SCHEMA

La consulta anterior comprueba la existencia de la tabla Clientes en todos los esquemas de la base de datos actual. En lugar de esto, si desea verificar la existencia de la Tabla en un Esquema especificado y la Base de datos especificada, podemos escribir la consulta anterior de la siguiente manera:

IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

RESULTADO:
Verificar la existencia de la tabla Utilizando INFORMATION_SCHEMA.Vista de tablas 1

Pros de este enfoque: Las vistas INFORMATION_SCHEMA son portátiles en diferentes sistemas RDBMS, por lo que la portabilidad a diferentes RDBMS no requiere ningún cambio.

Cómo comprobar si existe un procedimiento almacenado en Sql Server

Enfoque 2: Usando la función OBJECT_ID ()

Podemos usar la función OBJECT_ID () como se muestra a continuación para comprobar si existe una tabla de clientes en la base de datos actual.

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

RESULTADO:
Comprobar la existencia de la tabla Utilizando la función OBJECT_ID ()

Especificar el Nombre de la base de datos y las partes del Nombre del esquema para el Nombre de la tabla es opcional. Sin embargo, especificar el Nombre de la base de datos y el Nombre del esquema proporciona una opción para verificar la existencia de la tabla en la base de datos especificada y dentro de un esquema especificado, en lugar de verificar la base de datos actual en todos los esquemas. La siguiente consulta muestra que, aunque la base de datos actual es la base de datos MAESTRA, podemos verificar la existencia de la tabla Clientes en el esquema dbo en la base de datos SqlHintsDemoDB.

USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

RESULTADO:
Comprobar la existencia de la tabla Utilizando la función OBJECT_ID () 1

Pros: Fácil de recordar. Otro punto notable a mencionar sobre la función OBJECT_ID () es: proporciona una opción para verificar la existencia de la Tabla Temporal que se crea en el contexto de conexión actual. Todos los demás enfoques comprueban la existencia de la Tabla Temporal creada en todo el contexto de conexiones en lugar de solo en el contexto de conexión actual. La siguiente consulta muestra cómo comprobar la existencia de una Tabla Temporal utilizando la función OBJECT_ID ():

CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO

RESULTADO:
Comprobar la Existencia de una tabla temporal Utilizando la función OBJECT_ID () 1

Cómo comprobar si existe una base de datos en Sql Server

Enfoque 3: Utilizando sys.Vista de catálogo de objetos

Podemos usar el Sys.Vista de catálogo de objetos para comprobar la existencia de la tabla como se muestra a continuación:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END

RESULT
Comprobar la existencia de la tabla Mediante Sys.Ver objetos

Cómo comprobar si existe un registro en una tabla

Enfoque 4: Usando sys.Vista de catálogo de tablas

Podemos usar el sistema.Vista de catálogo de tablas para comprobar la existencia de la tabla como se muestra a continuación:

IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END

RESULT
Comprobar la existencia de la tabla Mediante Sys.Vista de catálogo de tablas

Sys.La vista de catálogo de tablas hereda las filas del sistema.Vista de catálogo de objetos, Sys.la vista de catálogo de objetos se conoce como vista base donde como sys.Las tablas se denominan vista derivada. Sys.Tablas devolverá las filas solo para los objetos de tabla, mientras que Sys.Vista de objetos además de devolver las filas para objetos de tabla, devuelve filas para objetos como: procedimiento almacenado, vistas, etc.

Cómo comprobar si existe una VISTA en Sql Server

Enfoque 5: Evite usar sys.sysobjects System table

Debemos evitar usar sys.sysobjects Tabla de sistema directamente, el acceso directo a ella quedará obsoleto en algunas versiones futuras de Sql Server. De acuerdo con el enlace de Microsoft BOL, Microsoft sugiere usar el sistema de vistas de catálogo.objects / sys.tablas en lugar de sys.sysobjects tabla de sistema directamente.

IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END

RESULTADO:
Comprobar la Existencia de la tabla Usando Sys.tabla del sistema sysobjects

:
Cómo comprobar si existe una base de datos
Cómo comprobar si existe un procedimiento almacenado en Sql Server
Cómo comprobar si existe una vista
Cómo comprobar si existe una tabla temporal
Cómo comprobar si existe un registro en la tabla

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *