Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Fazer um objeto DIE no SQL Server


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