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