sql test DROP SE EXISTE VS DROP?




sql remove row from table (4)

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?


Se não houver nenhuma tabela com esse nome, o DROP falhará com o erro, enquanto DROP IF EXISTS não fará nada.

Isso é útil se você criar / modificar seu banco de dados com um script; Desta forma, você não precisa garantir manualmente que as versões anteriores da tabela sejam excluídas. Você acabou de fazer uma DROP IF EXISTS e esquece.

Naturalmente, seu mecanismo de banco de dados atual pode não suportar essa opção, é difícil dizer mais sobre o erro com as informações fornecidas.


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; 

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.


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