sql >> Base de Datos >  >> RDS >> Sqlserver

Hacer un objeto DIE en SQL Server

En SQL Server, si intenta eliminar un objeto que no existe, obtendrá un error. Si no desea obtener un error, deberá agregar un código adicional para verificar la existencia del objeto.

Antes de SQL Server 2016, necesitaba agregar un IF declaración que consultó los objetos del sistema relevantes para averiguar si el objeto existía o no.

Desde SQL Server 2016, ahora puede usar un método nuevo y más limpio para verificar si existe un objeto. Lo llamaremos DROP IF EXISTS (también conocido como "DIE").

Ejemplo 1:sintaxis básica

La sintaxis en realidad no contiene el DROP IF EXISTS cuerda como es. Lo que debe hacer es insertar el tipo de objeto entre DROP y IF .

DROP TABLE IF EXISTS Customers

En este caso, estoy eliminando una tabla, por lo que la palabra TABLE se inserta entre DROP y IF . El nombre de la tabla que quiero eliminar (en este caso, Clientes ) se coloca al final.

Ejemplo 2:demostración básica

Este es un ejemplo de cómo crear una base de datos, luego soltarla y luego intentar soltarla de nuevo.

CREATE DATABASE Homer;
GO
DROP DATABASE IF EXISTS Homer;
GO
DROP DATABASE IF EXISTS Homer;
GO

Resultado:

Started executing query at Line 17
Commands completed successfully.

Started executing query at Line 19
Commands completed successfully.

Started executing query at Line 21
Commands completed successfully.

No se producen errores, aunque intento colocar un objeto inexistente en la tercera línea.

Ejemplo 3 – Sin SI EXISTE

Aquí está de nuevo, excepto que esta vez elimino el IF EXISTS parte.

CREATE DATABASE Homer;
GO
DROP DATABASE Homer;
GO
DROP DATABASE Homer;
GO

Resultado:

Started executing query at Line 17
Commands completed successfully.

Started executing query at Line 19
Commands completed successfully.

Started executing query at Line 21
Msg 3701, Level 11, State 1, Line 5
Cannot drop the database 'Homer', because it does not exist or you do not have permission.

En este caso me sale un error, porque está intentando soltar un objeto que no existe.

Ejemplo 4:columnas y restricciones

También puede usar DIE en columnas y restricciones.

Por ejemplo, puede usar DROP COLUMN IF EXISTS dentro de su ALTER TABLE declaración.

He aquí un ejemplo.

DROP TABLE IF EXISTS DieTest;
GO

CREATE TABLE DieTest
(
    DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(),
    DieTestName varchar(70), 
    InsertDate datetime2(7) NOT NULL DEFAULT GETDATE()
);
GO

ALTER TABLE DieTest
DROP COLUMN IF EXISTS DieTestName;
GO

ALTER TABLE DieTest
DROP COLUMN IF EXISTS DieTestName;
GO

Resultado:

Started executing query at Line 1
Commands completed successfully.

Started executing query at Line 3
Commands completed successfully.

Started executing query at Line 11
Commands completed successfully.

Started executing query at Line 15
Commands completed successfully.

Ejemplo 5:antes de SQL Server 2016

Antes de SQL Server 2016, para probar la existencia de un objeto, debía hacer algo como esto:

IF DB_ID('Homer') IS NOT NULL
DROP DATABASE Homer;

Ese ejemplo usa DB_ID() porque estamos tratando con una base de datos. Si el objeto era de un tipo diferente, es posible que deba usar OBJECT_ID() función o algo completamente diferente.

Por ejemplo:

IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL
DROP TABLE dbo.Customers;
 
IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger')
DROP TRIGGER MyTrigger

Una vez que empecemos a mirar este código, podemos ver por qué DROP IF EXISTS es una adición bienvenida a la sintaxis de T-SQL.

Objetos elegibles

DIE se puede usar en los siguientes objetos.

AGREGADO

PROCEDIMIENTO

MESA

MONTAJE

ROL

GATILLO

VER

REGLA

TIPO

BASE DE DATOS

ESQUEMA

USUARIO

PREDETERMINADO

POLÍTICA DE SEGURIDAD

VER

FUNCIÓN

SECUENCIA

ÍNDICE

SINÓNIMO

Como se mencionó, DIE también se puede usar en columnas y restricciones cuando se usa ALTER TABLE declaración:

  • ALTER TABLE DROP COLUMN SI EXISTE
  • ALTER TABLE DROP RESTRICTION SI EXISTE