sql - test - DROP SE EXISTE VS DROP?




sql remove row from table (4)

A sintaxe padrão do SQL é

DROP TABLE table_name;

IF EXISTS não é padrão; diferentes plataformas podem suportá-lo com sintaxe diferente ou não suportá-lo. No PostgreSQL, a sintaxe é

DROP TABLE IF EXISTS table_name;

O primeiro lançará um erro se a tabela não existir ou se outros objetos de banco de dados dependerem dela. Na maioria das vezes, os outros objetos do banco de dados serão referências de chaves estrangeiras, mas também podem existir outras. (Exibições, por exemplo.) O segundo não lançará um erro se a tabela não existir, mas ainda lançará um erro se outros objetos de banco de dados dependerem dela.

Para descartar uma tabela e todos os outros objetos que dependem dela, use um deles.

DROP TABLE table_name CASCADE;
DROP TABLE IF EXISTS table_name CASCADE;

Use CASCADE com muito cuidado.

Alguém pode me dizer se há alguma diferença entre

DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]

Estou perguntando isso porque estou usando o modelo JDBC no meu aplicativo da web MVC. Se eu usar DROP [TABLE_NAME] o erro disse que a tabela existe. E se eu usar DROP IF EXISTS [TABLE_NAME] ele diz uma gramática ruim do SQL. Alguém pode ajudar?


Não é o que é perguntado diretamente. Mas, olhando como fazer tabelas de descarte corretamente, eu tropecei nessa questão, como eu acho que muitas outras fazem também.

Do SQL Server 2016+ você pode usar

DROP TABLE IF EXISTS dbo.Table

Para o SQL Server <2016 o que eu faço é o seguinte para uma tabela permanente

IF OBJECT_ID('dbo.Table', 'U') IS NOT NULL 
  DROP TABLE dbo.Table; 

Ou isso, por uma mesa temporária

IF OBJECT_ID('tempdb.dbo.#T', 'U') IS NOT NULL
  DROP TABLE #T; 

Você esqueceu a table em sua sintaxe:

drop table [table_name]

que derruba uma mesa.

Usando

drop table if exists [table_name]

verifica se a tabela existe antes de soltá-la.
Se existir, será descartado.
Se não, nenhum erro será lançado e nenhuma ação será tomada.


DROP TABLE IF EXISTS [table_name]

ele primeiro verifica se a tabela existe, se ela excluir a tabela enquanto

DROP TABLE [table_name]

elimina sem verificar, por isso, se não existir, sai com um erro





drop-table