No SQL Server, se você tentar descartar um objeto que não existe, receberá um erro. Se você não quiser receber um erro, precisará adicionar algum código extra para verificar a existência do objeto.
Antes do SQL Server 2016, você precisava adicionar um
IF
instrução que consultou os objetos relevantes do sistema para descobrir se o objeto existia ou não. No SQL Server 2016, agora você pode usar um método novo e mais limpo para verificar se existe um objeto. Vamos chamá-lo de
DROP IF EXISTS
(também conhecido como "DIE"). Exemplo 1 – Sintaxe básica
A sintaxe na verdade não contém o
DROP IF EXISTS
corda como ela é. O que você precisa fazer é inserir o tipo de objeto entre DROP
e IF
. DROP TABLE IF EXISTS Customers
Neste caso, estou descartando uma tabela, então a palavra
TABLE
é inserido entre DROP
e IF
. O nome da tabela que quero eliminar (neste caso Clientes ) é colocado no final. Exemplo 2 – Demonstração básica
Aqui está um exemplo de como criar um banco de dados, depois eliminá-lo e, em seguida, tentar eliminá-lo novamente.
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.
Nenhum erro ocorre, mesmo que eu tente soltar um objeto inexistente na terceira linha.
Exemplo 3 – Sem SE EXISTE
Aqui está novamente, exceto que desta vez eu removo o
IF EXISTS
papel. 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.
Nesse caso, recebo um erro, porque está tentando descartar um objeto que não existe.
Exemplo 4 – Colunas e Restrições
Você também pode usar DIE em colunas e restrições.
Por exemplo, você pode usar
DROP COLUMN IF EXISTS
dentro do seu ALTER TABLE
demonstração. Aqui está um exemplo.
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.
Exemplo 5 – Antes do SQL Server 2016
Antes do SQL Server 2016, para testar a existência de um objeto, você precisaria fazer algo assim:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Esse exemplo usa
DB_ID()
porque estamos lidando com um banco de dados. Se o objeto for de um tipo diferente, talvez seja necessário usar o OBJECT_ID()
função ou algo completamente diferente. Por exemplo:
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
Assim que começarmos a olhar para este código, podemos ver porque
DROP IF EXISTS
é uma adição bem-vinda à sintaxe T-SQL. Objetos qualificados
DIE pode ser usado nos seguintes objetos.
AGREGAR | PROCEDIMENTO | TABELA |
CONJUNTO | FUNÇÃO | ACIONAR |
VISUALIZAR | REGRA | TIPO |
BASE DE DADOS | ESQUEMA | DO UTILIZADOR |
PREDEFINIÇÃO | POLÍTICA DE SEGURANÇA | VISUALIZAR |
FUNÇÃO | SEQÜÊNCIA | |
ÍNDICE | SINÔNIMO |
Como mencionado, DIE também pode ser usado em colunas e restrições ao usar o
ALTER TABLE
demonstração:- ALTER TABLE DROP COLUMN SE EXISTE
- ALTER TABLE DROP CONSTRAINT SE EXISTE