Update Masivo!!!

03/01/2007 - 00:48 por Irak Rubio | Informe spam
Hola Grupo que tal.
Resulta que via ftp recibo un archivo de los llamados "postulados SQL" con
aproximadamente un millon de sentencias de actualización SQL..

Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
linea por linea y voy actualizando registro por registro en mi Servidor SQL
Local.

Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
directamente desde un objeto connection mas o menos asi:
Dim Instruccion as String
do while not eof(nofile)
line input #NoFile, Instruccion
Cn.Execute Instruccion
Loop

La instruccion trae un comando de actualizacion (UPDATE) que viene
condicionado
a una llave x...

UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores

Considerando que las tablas tienen tropocientosmil registros debo decirles que
este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón de
registros

Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
SQLServer tiene un comando de carga masiva de datos llamada BulkCopy (que es
extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera algo
así como una especie de BulkUpdate o ver si existe algún consejo de cómo
puedo harle para hacer que el rendimiento de mis sentencias sea mayor...

Gracias por tu tiempo.

Preguntas similare

Leer las respuestas

#1 Maxi
03/01/2007 - 03:07 | Informe spam
Hola, habria que analizarlo mas en detalle, pero en principio si necesitas
hacer 1M de updates por dia no veo otro camino. Lo que me llama la etencion
es que debas hacer tantos updates por dia? esos registros van cambiando tan
rapido? si usas SQLServer en el otro extremo has pensado en usar
replicacion?


Saludos

[Microsoft MVP SQL Server]
www.sqlgurus.org
Buenos Aires - Argentina
http://maxiaccotto.blogspot.com/
"Irak Rubio" wrote in message
news:
Hola Grupo que tal.
Resulta que via ftp recibo un archivo de los llamados "postulados SQL" con
aproximadamente un millon de sentencias de actualización SQL..

Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
linea por linea y voy actualizando registro por registro en mi Servidor
SQL
Local.

Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
directamente desde un objeto connection mas o menos asi:
Dim Instruccion as String
do while not eof(nofile)
line input #NoFile, Instruccion
Cn.Execute Instruccion
Loop

La instruccion trae un comando de actualizacion (UPDATE) que viene
condicionado
a una llave x...

UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores

Considerando que las tablas tienen tropocientosmil registros debo decirles
que
este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón de
registros

Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
SQLServer tiene un comando de carga masiva de datos llamada BulkCopy (que
es
extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera
algo
así como una especie de BulkUpdate o ver si existe algún consejo de cómo
puedo harle para hacer que el rendimiento de mis sentencias sea mayor...

Gracias por tu tiempo.




Respuesta Responder a este mensaje
#2 Luis Tarzia
03/01/2007 - 03:09 | Informe spam
Tendrias que hacer el bulk insert en una tabla temporal y lueg
UPDATE MiTabla Set MiCampo=B.MiValor


FROM MITABLA A INNER JOIN TEMPORAL B ON
A.MiLlave=B.MisValores
Con un indice en cada campo no tendria que tardar mucho.

"Irak Rubio" wrote in message
news:
Hola Grupo que tal.
Resulta que via ftp recibo un archivo de los llamados "postulados SQL" con
aproximadamente un millon de sentencias de actualización SQL..

Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
linea por linea y voy actualizando registro por registro en mi Servidor


SQL
Local.

Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
directamente desde un objeto connection mas o menos asi:
Dim Instruccion as String
do while not eof(nofile)
line input #NoFile, Instruccion
Cn.Execute Instruccion
Loop

La instruccion trae un comando de actualizacion (UPDATE) que viene
condicionado
a una llave x...

UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores

Considerando que las tablas tienen tropocientosmil registros debo decirles


que
este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón de
registros

Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
SQLServer tiene un comando de carga masiva de datos llamada BulkCopy (que


es
extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera


algo
así como una especie de BulkUpdate o ver si existe algún consejo de cómo
puedo harle para hacer que el rendimiento de mis sentencias sea mayor...

Gracias por tu tiempo.




Respuesta Responder a este mensaje
#3 Isaias
03/01/2007 - 03:25 | Informe spam
Luis

Yo entiendo que Irak dice que el archivo, ya trae las instrucciones T-SQL,
siedo asi, entonces tendri que subir con el BULK INSERT su archivo en una
tabla temporal y recorrer dicha tabla para ejecutar la instruccion.

¿Asi es Irak?, ¿Traes la instruccion de UPDATE en tu archivo que subirias
con BULK INSERT?

Saludos
IIslas


"Luis Tarzia" wrote:

Tendrias que hacer el bulk insert en una tabla temporal y lueg
> UPDATE MiTabla Set MiCampo=B.MiValor
FROM MITABLA A INNER JOIN TEMPORAL B ON
A.MiLlave=B.MisValores
Con un indice en cada campo no tendria que tardar mucho.

"Irak Rubio" wrote in message
news:
> Hola Grupo que tal.
> Resulta que via ftp recibo un archivo de los llamados "postulados SQL" con
> aproximadamente un millon de sentencias de actualización SQL..
>
> Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
> linea por linea y voy actualizando registro por registro en mi Servidor
SQL
> Local.
>
> Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
> directamente desde un objeto connection mas o menos asi:
> Dim Instruccion as String
> do while not eof(nofile)
> line input #NoFile, Instruccion
> Cn.Execute Instruccion
> Loop
>
> La instruccion trae un comando de actualizacion (UPDATE) que viene
> condicionado
> a una llave x...
>
> UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores
>
> Considerando que las tablas tienen tropocientosmil registros debo decirles
que
> este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón de
> registros
>
> Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
> SQLServer tiene un comando de carga masiva de datos llamada BulkCopy (que
es
> extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera
algo
> así como una especie de BulkUpdate o ver si existe algún consejo de cómo
> puedo harle para hacer que el rendimiento de mis sentencias sea mayor...
>
> Gracias por tu tiempo.
>
>
>
>



Respuesta Responder a este mensaje
#4 Maxi
03/01/2007 - 13:18 | Informe spam
Hola, esta es otra opcion muy buena :)


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Luis Tarzia" escribió en el mensaje
news:%
Tendrias que hacer el bulk insert en una tabla temporal y lueg
UPDATE MiTabla Set MiCampo=B.MiValor


FROM MITABLA A INNER JOIN TEMPORAL B ON
A.MiLlave=B.MisValores
Con un indice en cada campo no tendria que tardar mucho.

"Irak Rubio" wrote in message
news:
Hola Grupo que tal.
Resulta que via ftp recibo un archivo de los llamados "postulados SQL"
con
aproximadamente un millon de sentencias de actualización SQL..

Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
linea por linea y voy actualizando registro por registro en mi Servidor


SQL
Local.

Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
directamente desde un objeto connection mas o menos asi:
Dim Instruccion as String
do while not eof(nofile)
line input #NoFile, Instruccion
Cn.Execute Instruccion
Loop

La instruccion trae un comando de actualizacion (UPDATE) que viene
condicionado
a una llave x...

UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores

Considerando que las tablas tienen tropocientosmil registros debo
decirles


que
este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón
de
registros

Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
SQLServer tiene un comando de carga masiva de datos llamada BulkCopy (que


es
extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera


algo
así como una especie de BulkUpdate o ver si existe algún consejo de cómo
puedo harle para hacer que el rendimiento de mis sentencias sea mayor...

Gracias por tu tiempo.








Respuesta Responder a este mensaje
#5 Rafae J. Cruz
03/01/2007 - 14:35 | Informe spam
Hola Irak:

Mis recomendacion sobre tu caso es la siguiente, tomas todos tus registros
y los levantas con bulk insert y luego le haces los update, insert, seletect
y todo lo
que necesites en sql atravez de procedimientos almacenados para que de esta
manera este todo del lado del server pues no es un trabajo que puede llevar
capa de cliente.

Una vez resolvi un problema parecido mediante este metodo, lo que hice fue
arme un par de procedimietos que hacian los update necesarios y recibia un
archivo
via ftp lo cual lo realizaba tambien a travez del sql server y luego pues
aplicaba todos
mis comandos necesarios y con este soluciones dicha tarea.

Saludos,

BitOne®
"Maxi" wrote in message
news:%
Hola, esta es otra opcion muy buena :)


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Luis Tarzia" escribió en el mensaje
news:%
Tendrias que hacer el bulk insert en una tabla temporal y lueg
UPDATE MiTabla Set MiCampo=B.MiValor


FROM MITABLA A INNER JOIN TEMPORAL B ON
A.MiLlave=B.MisValores
Con un indice en cada campo no tendria que tardar mucho.

"Irak Rubio" wrote in message
news:
Hola Grupo que tal.
Resulta que via ftp recibo un archivo de los llamados "postulados SQL"
con
aproximadamente un millon de sentencias de actualización SQL..

Cuando los recibo, abro el archivito de texto de aprox. 185MB y recorro
linea por linea y voy actualizando registro por registro en mi Servidor


SQL
Local.

Para la actualización ocupo Visual Basic 6.0 con ADO2.8 y lo hago
directamente desde un objeto connection mas o menos asi:
Dim Instruccion as String
do while not eof(nofile)
line input #NoFile, Instruccion
Cn.Execute Instruccion
Loop

La instruccion trae un comando de actualizacion (UPDATE) que viene
condicionado
a una llave x...

UPDATE MiTabla Set MiCampo=MiValor Where MiLlave=MisValores

Considerando que las tablas tienen tropocientosmil registros debo
decirles


que
este proceso es demasiado LENTO! me llevo dos horas actualizar 1 millón
de
registros

Todo esto sale a relucir, porque a diferencia del UPDATE, He visto que
SQLServer tiene un comando de carga masiva de datos llamada BulkCopy
(que


es
extremadamente rápida), pero que solamente hace "Inserts"... Yo quisiera


algo
así como una especie de BulkUpdate o ver si existe algún consejo de cómo
puedo harle para hacer que el rendimiento de mis sentencias sea mayor...

Gracias por tu tiempo.












email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida