Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

unir dos scripts delete

Estas en el tema de unir dos scripts delete en el foro de SQL Server en Foros del Web. Antes de nada saludados a todo@s, ahora expongo mi pequeño problema Tengo estos dos scripts para borrar registros de dos tablas, ambas tablas están unidas ...
  #1 (permalink)  
Antiguo 02/11/2012, 16:00
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
unir dos scripts delete

Antes de nada saludados a todo@s, ahora expongo mi pequeño problema
Tengo estos dos scripts para borrar registros de dos tablas, ambas tablas están unidas por dos campos (Documento) y Fecha, por separado funcionan perfectamente, pero quisiera unirlos, agradezco de antemano vuestra ayuda

DELETE
FROM [Registro]
where
Documento='02/0001'
and
Fecha Between '2009-01-02' and '2009-01-02'
*
Delete
FROM [apunte]
where
Documento='02/0001'
and
Fecha Between '2009-01-02' and '2009-01-02'
  #2 (permalink)  
Antiguo 02/11/2012, 16:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: unir dos scripts delete

no se pueden eliminar registros de 2 tablas en el mismo query, lo que puedes hacer es si tienen dependencia hacer un borrado en cascada :)


A DELETE statement will only delete from one table, but there are ways.

http://msdn.microsoft.com/en-us/library/ms174979.aspx
You could define Foreign Key constraints for the other tables that reference
the master table's ProductID with ON DELETE CASCADE. This would cause the
related rows in those tables to be deleted. This is the least programming
model, is part of the SQL standard, etc. Just be sure that you think through
the issues with always deleting the referencing rows.

http://msdn.microsoft.com/en-us/library/ms189799.aspx
You could create a delete trigger on the table where you delete the master
row for the ProductID that would then contain code to delete related rows
from other tables. You still have to write the code for this one, but it
hides inside the trigger and is used by any deletes from the table as long
as the trigger is not disabled.

saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 02/11/2012 a las 16:12
  #3 (permalink)  
Antiguo 03/11/2012, 16:22
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Gracias, por responder tan rápido, esta claro que debo hacerlo a traves de un trigger, pero no estoy muy puesto puede alguien ayudarme al menos con la estructura que debe tener con los datos que he puesto, Gracias
  #4 (permalink)  
Antiguo 04/11/2012, 00:14
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
El Trigger

Primero que nada:
Código SQL:
Ver original
  1. CREATE TRIGGER MiTrigger
  2. ON Registro
  3. After DELETE AS
  4. DELETE
  5. FROM    Apunte A
  6. WHERE   EXISTS (SELECT 1
  7.         FROM    Deleted D
  8.         WHERE   D.Documento=A.Documento
  9.             AND D.Fecha=A.Fecha);
Sin embargo tengo tres comentarios:
1. Yo pienso que es una muy mala idea manipular así los datos.
2. Este Trigger se sirve solamente para instrucciones Delete cuyas restricciones incluyen las columnas Documento & Fecha como en tu ejemplo.
3. ¿porque utilizas el Between? en este caso- Fecha='20090102' es suficiente.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 04/11/2012, 16:51
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Gracias, Entiendo las razones que expones, mi necesidad es la siguiente el rango de fechas lo necesito porque realmente tengo que eliminar registros entre fechas de al menos 20 días, de documento lo quiero utilizar para filtrar (ejemplo 01/xxxxxxxx) solo me interesan las dos primeras cifras, esto aun no sé como se hace.
Espero que sea un poco mas claro, es posible que existan otras alternativas estoy abierto a ideas
Muchas gracias otra vez
  #6 (permalink)  
Antiguo 04/11/2012, 16:59
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Buenas otra vez en la parte del filtrado creo que no me he explicado bien,
El código empleado en documento es del siguiente formato
01/xxxxxxxx, 02/xxxxxxxx, 01/xxxxxxxa,02/xxxxxxxa, etc
Por eso solo me interesa filtrar por esos dos primeros dígitos, ejemplo borrar todos los 01 entre el 20090102 al 20090131
Espero que se entienda mejor
Gracias
  #7 (permalink)  
Antiguo 04/11/2012, 21:23
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: unir dos scripts delete

En este caso la condición debe ser así:
where Documento Like '02/%'
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #8 (permalink)  
Antiguo 05/11/2012, 01:12
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Buenas, disculpa mi atrevimiento pero sería posible crear una consulta con esos parámetros y en esa consulta seleccionar los que deseo eliminar, con lo anterior me vale pero esto sería mas estético
Gracias
  #9 (permalink)  
Antiguo 05/11/2012, 05:59
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Hola otra vez he probado el trigger y me da el siguiente error:
Mens 102, nivel 15, estado 1, procedimiento MiTrigger, linea 5
Sintaxis incorrecta cerca de 'A'
No veo el problema
  #10 (permalink)  
Antiguo 05/11/2012, 14:01
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: unir dos scripts delete

No se que es el problema.. Intenta así:
Código SQL:
Ver original
  1. CREATE TRIGGER MiTrigger
  2. ON Registro
  3. After DELETE AS
  4. DELETE
  5. FROM* * Apunte
  6. WHERE * EXISTS (SELECT 1
  7. * * * * FROM* * Deleted D
  8. * * * * WHERE * D.Documento=Apunte.Documento
  9. * * * * * * AND D.Fecha=Apunte.Fecha);
Debes quitar el Trigger antes de crearlo de nuevo,
en cambio- cambiar el "Create Trigger" en "Alter Trigger".
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #11 (permalink)  
Antiguo 05/11/2012, 15:51
 
Fecha de Ingreso: noviembre-2012
Ubicación: Ourense
Mensajes: 7
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: unir dos scripts delete

Gracias lo probaré
  #12 (permalink)  
Antiguo 07/11/2012, 03:43
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 1 mes
Puntos: 4
Respuesta: unir dos scripts delete

Cita:
Iniciado por Libras Ver Mensaje
no se pueden eliminar registros de 2 tablas en el mismo query, lo que puedes hacer es si tienen dependencia hacer un borrado en cascada :)


A DELETE statement will only delete from one table, but there are ways.

http://msdn.microsoft.com/en-us/library/ms174979.aspx
You could define Foreign Key constraints for the other tables that reference
the master table's ProductID with ON DELETE CASCADE. This would cause the
related rows in those tables to be deleted. This is the least programming
model, is part of the SQL standard, etc. Just be sure that you think through
the issues with always deleting the referencing rows.

http://msdn.microsoft.com/en-us/library/ms189799.aspx
You could create a delete trigger on the table where you delete the master
row for the ProductID that would then contain code to delete related rows
from other tables. You still have to write the code for this one, but it
hides inside the trigger and is used by any deletes from the table as long
as the trigger is not disabled.

saludos!!
Hola, no se si estoy en lo cierto pero si se ponen 2 DELETES a continuación de un BEGIN, tipo:

BEGIN TRANSACTION
DELETE TABLE1...
DELETE TABLE2...
COMMIT / ROLLBACK TRANSACTION

No valdría con esta forma para que sea una misma query o en este caso transacción?
Saludos
  #13 (permalink)  
Antiguo 07/11/2012, 08:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: unir dos scripts delete

Cita:
Iniciado por ejbsoft Ver Mensaje
Hola, no se si estoy en lo cierto pero si se ponen 2 DELETES a continuación de un BEGIN, tipo:

BEGIN TRANSACTION
DELETE TABLE1...
DELETE TABLE2...
COMMIT / ROLLBACK TRANSACTION

No valdría con esta forma para que sea una misma query o en este caso transacción?
Saludos
Es cierta tu observacion pero lo que el compañero queria hacer era en un query con joins eliminar datos de 2 tablas que comparten relacion lo cual no se puede hacer, hacerlo con 2 querys es como se realiza, ya si lo haces con un procedure, function, trigger o whatever you want ya es cosa de cada quien :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: delete, registro, scripts, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:18.