Qué es más rápido: INSERT INTO o sp_executeSql

23/03/2007 - 13:44 por José Luis Capel - Aicom | Informe spam
Hola,

Tengo que hacer un volcado masivo de datos a un servidor SqlServer2000 a
través de Ado.

Actualmente estoy usando la sentencia INSERT INTO por cada fila.

Algo así:

FOR x := 1 TO 2000
...
oAdo:Execute("INSERT INTO miTabla VALUES( ..)")
...
NEXT

Me gustaría conocer vuestra opinión si cambio esa forma de hacer el insert
por


FOR x := 1 TO 2000
...
oAdo:Execute("exec sp_executesql N'INSERT INTO ..")
...
NEXT


Cualquier guia o ayuda será agradecida.

Saludos,
José Luis Capel

Preguntas similare

Leer las respuestas

#6 Jose Mariano Alvarez
25/03/2007 - 00:53 | Informe spam
Usa DTS o Integration services.

Usa IMPORT boton derecho sobre la tabla en el enterprise manager o
management studio, selecciona la fuente de datos el destino, etc.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)


IMPORTANTE

Por favor traten de indicar la versión de SQL y Service Pack.
La inclusión de (CREATE, INSERTS, etc.) para poder reproducir el problema
también ayuda.



"DNC" wrote in message
news:
ya te dijo maxi que son cosas totalmente distintas.

busca sobre BCP, BULK INSERT, tambien podrias ver algo de DTS, etc.

por lo poco que se entiende de tu pregunta piensas leer los registros
de a uno e ir insertandolos en la tabla destino uno a uno? son 2000
registros siempre? es raro!


Busca en los BOLs:
La instrucción INSERT agrega una o más filas nuevas a una tabla.
Tratada de forma simplificada, INSERT tiene la siguiente forma:

INSERT [INTO] table_or_view [(column_list)] data_values
sp_executesql
Ejecuta una instrucción o proceso por lotes de Transact-SQL que puede
utilizarse muchas veces, o que se ha generado dinámicamente. La
instrucción o proceso por lotes de Transact-SQL puede contener
parámetros

saludos!
diego




On 23 mar, 12:05, "José Luis Capel - Aicom"
wrote:
Hola Maxi,

> Hola, son 2 cosas totalmente distintas, si es masivo porque no usas

> INSERT INTO TUTABLA
> SELECT CAMPOS FROM TABLA_ORIGINAL


Ya me gustaría hacerlo como indicas... pero el caso es que los insert
masivos son de una tabla DBF (xBase) a Sql Server...

¿Cuales diferencias básicas hay entre Insert Into y sp_executeSql?

Saludos y gracias por tu ayuda.
José Luis Capel
Respuesta Responder a este mensaje
#7 José Luis Capel - Aicom
26/03/2007 - 11:54 | Informe spam
Javier,

Son entre 1000 y 2000.
Gracias!
José Luis Capel


"Javier Loria" escribió en el mensaje
news:%
Hola Jose Luis:
Mi opinion, es que si menos de 10,000 filas no tendras ningun problema,
si son 100,000 es mejor buscar otras alternativas: DTS, BULK INSERT,
DTS/SSIS, etc.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"José Luis Capel - Aicom" wrote in message
news:%
Hola,

Tengo que hacer un volcado masivo de datos a un servidor SqlServer2000 a
través de Ado.

Actualmente estoy usando la sentencia INSERT INTO por cada fila.

Algo así:

FOR x := 1 TO 2000
...
oAdo:Execute("INSERT INTO miTabla VALUES( ..)")
...
NEXT

Me gustaría conocer vuestra opinión si cambio esa forma de hacer el
insert por


FOR x := 1 TO 2000
...
oAdo:Execute("exec sp_executesql N'INSERT INTO ..")
...
NEXT


Cualquier guia o ayuda será agradecida.

Saludos,
José Luis Capel




Respuesta Responder a este mensaje
#8 José Luis Capel - Aicom
26/03/2007 - 11:56 | Informe spam
Maxi,

He leido en el BOL (o por lo menos así lo he entendido yo) que los
sp_executeSql queda 'precompilado' en el servidor sql server con lo cual,
ante llamadas repetitivas, se procesa un poco más rápido.

¿Lo entendí bien?

Saludos y gracias por tu ayuda,
José Luis Capel

"Maxi" escribió en el mensaje
news:
Hola, no podemos comparar vacas con aviones, una cosa es insert into y
otra es SQL_dinamico donde dentro podrias tambien usar insert into


Saludos

[Microsoft MVP SQL Server]
SQLTOTALConsulting - Servicios y consultoria de SQLServer
www.sqlgurus.org
Buenos Aires - Argentina
http://msmvps.com/blogs/maxiaccotto/
"José Luis Capel - Aicom" wrote in message
news:%
Hola Maxi,

Hola, son 2 cosas totalmente distintas, si es masivo porque no usas

INSERT INTO TUTABLA
SELECT CAMPOS FROM TABLA_ORIGINAL




Ya me gustaría hacerlo como indicas... pero el caso es que los insert
masivos son de una tabla DBF (xBase) a Sql Server...

¿Cuales diferencias básicas hay entre Insert Into y sp_executeSql?

Saludos y gracias por tu ayuda.
José Luis Capel






Respuesta Responder a este mensaje
#9 José Luis Capel - Aicom
26/03/2007 - 11:57 | Informe spam
Diego,

La inserción se haces desde un aplicativo ADO+Xailer+xHarbour
(www.xailer.es). El número de registros a insertar es variable pero oscilan
entre 1000 y 2000.

Saludos y gracias!
José Luis Capel


"DNC" escribió en el mensaje
news:
ya te dijo maxi que son cosas totalmente distintas.

busca sobre BCP, BULK INSERT, tambien podrias ver algo de DTS, etc.

por lo poco que se entiende de tu pregunta piensas leer los registros
de a uno e ir insertandolos en la tabla destino uno a uno? son 2000
registros siempre? es raro!


Busca en los BOLs:
La instrucción INSERT agrega una o más filas nuevas a una tabla.
Tratada de forma simplificada, INSERT tiene la siguiente forma:

INSERT [INTO] table_or_view [(column_list)] data_values
sp_executesql
Ejecuta una instrucción o proceso por lotes de Transact-SQL que puede
utilizarse muchas veces, o que se ha generado dinámicamente. La
instrucción o proceso por lotes de Transact-SQL puede contener
parámetros

saludos!
diego




On 23 mar, 12:05, "José Luis Capel - Aicom"
wrote:
Hola Maxi,

> Hola, son 2 cosas totalmente distintas, si es masivo porque no usas

> INSERT INTO TUTABLA
> SELECT CAMPOS FROM TABLA_ORIGINAL


Ya me gustaría hacerlo como indicas... pero el caso es que los insert
masivos son de una tabla DBF (xBase) a Sql Server...

¿Cuales diferencias básicas hay entre Insert Into y sp_executeSql?

Saludos y gracias por tu ayuda.
José Luis Capel
Respuesta Responder a este mensaje
#10 Jose Mariano Alvarez
26/03/2007 - 14:43 | Informe spam
Cuantas veces lo llamas?
Si es una sola vez no tiene sentido la diferencia.




Saludos
Ing. Jose Mariano Alvarez


(Cambia los ceros por O y saca lo que sobra)


IMPORTANTE

Por favor traten de indicar la versión de SQL y Service Pack.
La inclusión de (CREATE, INSERTS, etc.) para poder reproducir el problema
también ayuda.



"José Luis Capel - Aicom" wrote in message
news:%23F%
Maxi,

He leido en el BOL (o por lo menos así lo he entendido yo) que los
sp_executeSql queda 'precompilado' en el servidor sql server con lo cual,
ante llamadas repetitivas, se procesa un poco más rápido.

¿Lo entendí bien?

Saludos y gracias por tu ayuda,
José Luis Capel

"Maxi" escribió en el mensaje
news:
Hola, no podemos comparar vacas con aviones, una cosa es insert into y
otra es SQL_dinamico donde dentro podrias tambien usar insert into


Saludos

[Microsoft MVP SQL Server]
SQLTOTALConsulting - Servicios y consultoria de SQLServer
www.sqlgurus.org
Buenos Aires - Argentina
http://msmvps.com/blogs/maxiaccotto/
"José Luis Capel - Aicom" wrote in message
news:%
Hola Maxi,

Hola, son 2 cosas totalmente distintas, si es masivo porque no usas

INSERT INTO TUTABLA
SELECT CAMPOS FROM TABLA_ORIGINAL




Ya me gustaría hacerlo como indicas... pero el caso es que los insert
masivos son de una tabla DBF (xBase) a Sql Server...

¿Cuales diferencias básicas hay entre Insert Into y sp_executeSql?

Saludos y gracias por tu ayuda.
José Luis Capel










Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida