Como usar DROP IF EXISTS no SQL Server?



Experimente Nosso Instrumento Para Eliminar Problemas

Este artigo discute o “DROP IF EXISTS” declaração disponível no SQL Server 2016 e versões posteriores. “SE SAIR” é a cláusula opcional mais recente adicionada na instrução DROP existente no SQL Server 2016 e versões posteriores. Essencialmente, o “DROP IF EXISTS” A opção é usada quando é necessário verificar se uma entidade permanece em um banco de dados antes de ser criada ou eliminada. Nesse caso, vamos primeiro eliminar o objeto de banco de dados existente e, em seguida, recriá-lo com as alterações, se necessário.



Assim, evita a velha maneira de escrever a condição if e dentro da condição if escrever uma declaração para testar a presença do objeto para eliminá-lo. Se isso não ocorrer, a próxima instrução do lote continuará a ser executada. Mas se tentarmos eliminar um objeto que não existe, será exibida uma mensagem de erro conforme mostrado abaixo.



Execute a seguinte consulta.



drop table dbo.company

A saída será assim.

O erro surge ao eliminar o objeto de banco de dados que não existe

Sintaxe

“DROP object_type [IF EXISTS] object_name”

Argumentos

TIPO DE OBJETO:



O tipo de objeto pode ser qualquer um do banco de dados, gatilho, montagem, sequência, índice, tabela, visualização de procedimento, função, etc.

SE EXISTIR:

É uma cláusula opcional e se for mencionada na instrução DROP, irá verificar a existência do objeto, se existir irá cair, caso contrário, continuará a executar a próxima instrução do bloco sem produzir erros.

Agora, com a introdução do novo método “DROP IF EXISTS” no SQL Server 2016, os desenvolvedores podem escrever um código breve.

Primeiro, crie um banco de dados denominado “appuals”.

Criação de um banco de dados

Agora, criaremos uma tabela a ser eliminada executando o seguinte código.

use [appuals] Go CREATE TABLE temp (id INT, name varchar (100)); IR

A saída será a seguinte.

Criação de mesa

Além disso, crie um procedimento de armazenamento a ser eliminado usando o código a seguir.

USE [appuals] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Criar PROCEDURE [dbo]. [Sp_temp] AS BEGIN SET NOCOUNT ON; SELECT * de dbo.temp; FIM

A saída será como abaixo.

Criação de procedimento de armazenamento

Método antigo: antes de usar o SQL Server, soltar se sai em objetos de banco de dados

O uso do método DROP IF EXISTS antes do SQL Server 2016 exigia a gravação de um código de wrappers de instrução IF extenso.

Drop table se existir

O método anterior de descartar uma tabela é o seguinte.

Se estivermos usando o SQL Server 2015 ou anterior, precisamos executar o seguinte grupo de código.

If (OBJECT_ID ('dbo.temp') Não é Nulo) Eliminar Temp da Tabela

A saída será a seguinte.

Largando a mesa

Agora, sua sintaxe é bastante confusa, então se você não gostar e estiver usando o SQL Server 2016 ou superior, pode usar a instrução DROP IF EXIST simples em vez de grandes wrappers.

Procedimento de descarte, se houver:

Para eliminar o procedimento, temos que escrever uma instrução condicional para verificar se o procedimento de armazenamento existe ou não e, em seguida, escrever a instrução drop. Caso contrário, ele gerará um erro caso o procedimento armazenado não exista.

Agora execute as seguintes instruções para descartar o procedimento em versões anteriores ao SQL Server 2016.

IF EXISTS (SELECT 1 FROM sys.procedures WHERE Name = 'sp_temp') DROP PROCEDURE dbo.sp_temp

A saída será assim.

Abandone o procedimento usando o método antigo do código if wrapper

Elimine o banco de dados, se existir:

Se estiver usando versões anteriores do SQL Server, você precisará executar o código a seguir para eliminar o banco de dados.

SE DB_ID ('appuals') NÃO É NULO BEGIN DROP DATABASE appuals END

A saída será a seguinte.

Elimine o banco de dados usando um método antigo

Novo método: DROP IF EXISTS com suporte no SQL Server 2016 e versão superior

Para descartar um objeto de banco de dados no SQL Server 2016 e superior, precisamos executar uma instrução simples.

Eliminar tabela, se existir:

Podemos escrever uma declaração como a seguir no SQL Server 2016 para remover uma tabela armazenada se ela existir.

DROP TABLE IF EXISTS dbo.temp

A saída será assim.

Abandone a tabela usando o novo método

Procedimento de descarte, se houver:

Agora vamos eliminar o procedimento armazenado que criamos no início do artigo, executando o código a seguir.

PROCEDIMENTO DE QUEDA SE EXISTIR dbo.sp_temp

A saída será como abaixo.

Abandone a tabela usando o novo método

No que diz respeito à sintaxe, essa declaração simples é fácil de entender e lembrar. Da mesma forma, podemos seguir o mesmo procedimento para eliminar outros objetos de banco de dados.

Elimine o banco de dados, se existir:

Execute o código a seguir se quiser descartar o banco de dados usando a verificação se existe

USE MASTER GO DROP DATABASE SE EXISTIR appuals

A saída será como abaixo.

Elimine o banco de dados usando o novo método

A vantagem de usar este método é que, se o banco de dados não existir, ele não causará nenhum erro, a próxima instrução do lote continuará a ser executada. Vamos tentar eliminar novamente o banco de dados já descartado.

O erro surge ao eliminar novamente o banco de dados já eliminado.

Da mesma forma, podemos remover índices, visualizações, sequências, montagens, etc. do banco de dados.

3 minutos lidos