none
DELETE de varias tablas (20-30 segundos) RRS feed

  • Pregunta

  • Hola

    Estoy intentando borrar a la vez de varias tablas, pero se me queda "colgado" o tarda como 20-30 segundos. No se si estas sentencias para eliminar son corectas o se podría hacer de alguna manera más eficiente. Borro unos 1000 registros.
    Gracias por la ayuda!

    q = 'ESC1122'

    SQL1 = "DELETE FROM tbaccountingrecords WHERE diariocussupcodigo = '"&q&"' "
    ConData.Execute(SQL1)

    SQL2 = "DELETE FROM tbaccountingrecordstemp WHERE diariocussupcodigo = '"&q&"' OR diarioregtemporal = '"&q&"' "
    ConData.Execute(SQL2)

    SQL3 = "DELETE FROM tbaccountingcussupstatus WHERE cussupcode = '"&q&"' "
    ConData.Execute(SQL3)

    SQL4 = "DELETE FROM tbaccuntingcussupammounts WHERE acccusupcode = '"&q&"' "
    ConData.Execute(SQL4)

    SQL5 = "DELETE FROM tbcustomershistory WHERE customercodecode = '"&q&"' "
    ConData.Execute(SQL5)

    SQL6 = "DELETE FROM tborders WHERE ordercussupcode = '"&q&"' "
    ConData.Execute(SQL6)

    SQL7 = "DELETE FROM tborderstemp WHERE ordercussupcode = '"&q&"' "
    ConData.Execute(SQL7)

    SQL8 = "DELETE FROM tbcustomers WHERE customercodecode = '"&q&"' "
    ConData.Execute(SQL8)

    SQL9 = "DELETE FROM tbcustomeroffers WHERE occustomercodecode = '"&q&"' "
    ConData.Execute(SQL9)

    SQL10 = "DELETE FROM tbcustomeroffersall WHERE occustomercodecode = '"&q&"' "
    ConData.Execute(SQL10)

    SQL11 = "DELETE FROM tbcontacts WHERE contactcode = '"&q&"' "
    ConData.Execute(SQL11)

    sábado, 9 de julio de 2016 20:32

Respuestas

Todas las respuestas

  • jorge1.6.4.4,

    En lo personal, todas las operaciones de eliminación las colocaría dentro de un procedimiento y las ejecutaría como una transacción (BEGIN TRANSACTION) y claro, la aplicación realizaría una sola llamada al procedimiento almacenado.

    En caso no desees usar procedimientos almacenados ¿qué sucede si ejecutas una sola consulta sql conteniendo todas las operaciones de eliminación?

    q = 'ESC1122'
    
    SQL = "DELETE FROM tbaccountingrecords WHERE diariocussupcodigo = '" & q & "';GO DELETE FROM tbaccountingcussupstatus WHERE cussupcode = '" & q & "';GO <...>"
    
    ConData.Execute(SQL)
    sábado, 9 de julio de 2016 22:25
  • Si tarda mucho, puede ser porque las distintas tablas en las que estás borrando registros sean el destino de foreign keys en otras tablas, por lo que a cada registro que borra tiene que examinar la tabla de la foreign key para comprobar que ese registro no está en uso. Puedes comprobarlo examinando el plan de ejecución en SSMS. Si realmente el problema es ese, se alivia poniendo un índice sobre el campo que conecta el foreign key en la tabla original (no en la que estás borrando).
    domingo, 10 de julio de 2016 7:38
  • Sin el GO Funciona perfecto Gracias!!
    • Marcado como respuesta jorge1.6.4.4 domingo, 10 de julio de 2016 11:05
    domingo, 10 de julio de 2016 11:04
  • Hola y muchas gracias por tu consejo pero la verdad es que soy novato y no sé bien cómo hacer lo que me has explicado
    domingo, 10 de julio de 2016 12:16