Estoy escribiendo un procedimiento almacenado en SQL Server 2008. Necesito verificar si existe una tabla en la base de datos. Si no es así, necesito crearlo.
¿Cómo hago esto?
Estoy escribiendo un procedimiento almacenado en SQL Server 2008. Necesito verificar si existe una tabla en la base de datos. Si no es así, necesito crearlo.
¿Cómo hago esto?
CREATE TABLE IF NOT EXISTS ...
Respuestas:
Algo como esto
fuente
if (not exists (select object_id from sys.objects where object_id = OBJECT_ID(N'[dbo].[client_tgi_g67_period_list]') and type = 'U'))
Solo por contraste, me gusta usar la función object_id como se muestra a continuación. Es un poco más fácil de leer y no tiene que preocuparse por sys.objects vs. sysobjects vs. sys.all_objects vs. sys.tables. Forma básica:
Por supuesto, esto se mostrará como "Presente" si hay algún objeto presente con ese nombre. Si desea verificar solo las tablas, necesitaría:
Funciona también para tablas temporales:
fuente
Creemos una base de datos de muestra con una tabla mediante el siguiente script:
Enfoque 1: Uso de la vista INFORMATION_SCHEMA.TABLES
Podemos escribir una consulta como la siguiente para verificar si existe una tabla tblTest en la base de datos actual.
La consulta anterior verifica la existencia de la tabla tblTest 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 específico y la base de datos especificada, entonces podemos escribir la consulta anterior de la siguiente manera:
Ventajas de este enfoque: las vistas INFORMATION_SCHEMA son portables en diferentes sistemas RDBMS, por lo que la transferencia a diferentes RDBMS no requiere ningún cambio.
Enfoque 2: uso de la función OBJECT_ID ()
Podemos usar la
OBJECT_ID()
función que se muestra a continuación para verificar si existe una tabla tblTest en la base de datos actual.La especificación de las partes Nombre de base de datos y Nombre de esquema para el Nombre de tabla es opcional. Pero 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 consulta a continuación muestra que aunque la base de datos actual es la base de datos MASTER, podemos verificar la existencia de la
tblTest
tabla en eldbo
esquema de laTest
base de datos.Pros: fácil de recordar. Otro punto notable a mencionar sobre la
OBJECT_ID()
función 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 verifican la existencia de la tabla temporal creada en todo el contexto de conexiones en lugar de solo el contexto de conexión actual. La siguiente consulta muestra cómo verificar la existencia de una tabla temporal utilizando laOBJECT_ID()
función:Enfoque 3: Uso de sys.Objects Catalog View
Podemos usar la
Sys.Objects
vista de catálogo para verificar la existencia de la Tabla como se muestra a continuación:Enfoque 4: Uso de sys. Tablas Vista de catálogo
Podemos usar la
Sys.Tables
vista de catálogo para verificar la existencia de la Tabla como se muestra a continuación:Sys.Tables
la vista de catálogo hereda las filas de laSys.Objects
vista de catálogo, la vista deSys.objects
catálogo se conoce como vista base, dondesys.Tables
se conoce como vista derivada.Sys.Tables
devolverá las filas solo para los objetos de la tabla, mientras queSys.Object
view aparte de devolver las filas para los objetos de la tabla, devuelve filas para los objetos como: procedimiento almacenado, vistas, etc.Enfoque 5: Evite usar la tabla del sistema sys.sysobjects
Deberíamos evitar el uso de la
sys.sysobjects
tabla del sistema directamente, el acceso directo a él será obsoleto en algunas versiones futuras del servidor SQL. Según el enlace [Microsoft BOL] [1], Microsoft sugiere utilizar las vistas de catálogo ensys.objects/sys.tables
lugar de lasys.sysobjects
tabla del sistema directamente.Referencia: http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/
fuente
EDITADO
Puede buscar en sys.tables para verificar la existencia de la tabla deseada:
fuente
fuente
fuente
Pruebe la siguiente instrucción para verificar la existencia de una tabla en la base de datos:
Puede crear la tabla dentro del bloque if.
fuente
sysobjects
es una vista de compatibilidad que existe solo para evitar romper el código anterior. Mi sugerencia sería usar vistas del catálogo del sistema (por ejemplosys.objects
,sys.tables
) para el código que solo apuntará a instancias de SQL Server 2008, y vistas del esquema de información (por ejemploinformation_schema.tables
) para el código que necesita ser portátil. Puede encontrar más información sobre las diferentes vistas aquí: Consultando el Catálogo del Sistema SQL ServerSi no me equivoco, esto debería funcionar:
fuente