2012-03-21 33 views
10

Tengo un script que elimina una carga de tablas usando DROP TABLE IF EXISTS, esto funciona.Eliminar fila si existe tabla SQL

También hay una eliminación en este script para ELIMINAR una fila de otra tabla que no administro. Esta tabla puede existir o no.¿Hay alguien que verifique que la tabla exista antes de intentar eliminar una fila?

esto tiene que trabajar para MySQL y SQL Server

gracias Alex

+0

'DROP TABLE IF EXISTS' no funciona en SQL Server de todos modos. Necesitarás 2 scripts separados. –

Respuesta

11

Para comprobar en SQL SERVER,

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME = 'TheTable')) 
BEGIN 
    --Do Stuff 
END 

Para comprobar en MySQL:

Sólo tiene que contar:

SELECT COUNT(*) 
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]'; 
+0

Respuesta revisada por el moderador. –

2
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TABLE_NAME]') AND type in (N'U')) 
2

Para SQL Server: Se podría utilizar:

IF OBJECT_ID('tablename','U') IS NOT NULL 
1

Para MySQL

show tables like "test1"; 

Para SQL Server

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'testSchema' AND  TABLE_NAME = 'test1' 
2

no creo que encontrará una sintaxis común entre el servidor SQL y mi SQL. Es decir, se puede comprobar si los exsits tabla en SQL Server usando algo como:

if exists(select * from sys.objects where name like 'table_name') 

pero mySql tendría su propio catálogo.

A menos que se escribe un guión como:

if (sql_server) then 
    if exists(select * from sys.objects where name like 'table_name') 
else --mySQl 
    --execute the mysql script 
1

Una pregunta que desea t o pregúntese (en términos de diseño de la base de datos): ¿Por qué está tratando de eliminar filas de una tabla que no está seguro de que exista? Si no es así, pero esperas que lo haga, ¿no prefieres crear la tabla que no eliminarla?

De todos modos, la respuesta de Chris Gesslers hace exactamente lo que estás preguntando en SQL Server, pero aquí hay algo de olor.

La construcción en MySQL se puede utilizar es

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'databasename' 
AND table_name = 'tablename' 

y comprobar los resultados

6

Ésta elimina la fila y no se queja si no puede.

DELETE IGNORE FROM table WHERE id=1 

source here.

Cuestiones relacionadas