PDA

Ver la Versión Completa : inserciones de multiples filas


Tama
07-06-2004, 18:36:23
hola a todos:

es posible crear inserciones de varias filas en una tabla en SQL-server mediante una sola instruccion SQL, sin utilizar ADO?

gracias.

delphi.com.ar
07-06-2004, 18:41:29
Si!
Puedes hacer un insert de un select por ejemplo.


INSERT INTO TABLA (CAMPO1, CAMPO2, CAMPO3...)
SELECT CAMPO1, CAMPO2, CAMPO3... FROM TABLA2

Saludos!

Sirkius
07-06-2004, 22:20:46
Umhh... interesante. Y se podría hacer poniendo de alguna forma los valores en la sentencia?? (por curiosidad mas que nada...)

guillotmarc
07-06-2004, 22:23:52
Hola.

¿ Te refieres a esto ?


INSERT INTO TABLA (CAMPO1, CAMPO2, CAMPO3...)
VALUES (:CAMPO1, :CAMPO2, :CAMPO3, ...)


Saludos.

Tama
08-06-2004, 10:23:10
Bueno, no es exactamente lo que estoy buscando. Me explico..., cuento con un grán número de datos que recibo por puerto serie y necesito probar si enviando un conjunto de ellos al servidor sql, éste en su total consume menor o igual tiempo que si le envío registro por registro, ya que el tiempo de envío al servidor entre un registro y el siguiente suele ser inferior a 1 ó 2 segundos.

Por lo que he visto hasta ahora, parece que es necesario que este tipo de inserts, se deben realizar desde un archivo de texto o desde una consulta previa, pero... ¿desde datos contenidos en memoria...?

saludos.

cbrrr
08-06-2004, 10:48:03
Hola Tama

Si quieres hacer inserts de valores que no salgan de una sentencia Select, no te va a quedar más remedio que preparar un script con todas las sentencias y lanzar ese script mediante algún componente de acceso a tu motor que te permita tal característica o bien lanzar una a una las sentencia insert desde un componente Query.

Espero que te sirva

delphi.com.ar
08-06-2004, 15:35:35
Si quieres ahorrar tiempo te recomiendo armar un único SQL, hacer u prepare, y ciclar cargando los valores de los registros por parámetros y ejecutándolo. La teoría dice que esto sería lo mas rápido, ya que el motor se evitaría de parsear, evaluar y compilar el SQL para cada insert.
Por otro lado, fíjate que tu pregunta original solo ha servido para que deliremos un poco, te recomiendo formular mejor tus futuras preguntas, y te sugiero que leas la Guía de Estilo (http://www.clubdelphi.com/users/llsoft/Docs/GuiaEstilo.php).

Saludos!

jachguate
08-06-2004, 15:54:54
Me parece que 1 o 2 segundos debiera ser un tiempo sobrado con cualquier servidor decente para insertar un dato. (De hecho una sola sentencia insert debiera ejecutarse en unos cuantos milisegundos).

Lo que te ha dicho delphi.com.ar es muy importante, y puede ayudarte a reducir "costos" de las inserciones... pero si aún asi es insuficiente, y despues de un rato de datos continuos hay un momento de respiro... podes valerte de tus componentes de acceso, que seguramente tendrán alguna forma de manejar datos en cache. De esta forma vas haciendo insert's sobre el cache, y una vez haya tiempo de "descanso" en la llegada de información, te encargas de aplicarlos a la BD.

Ojo, que esto tiene el riesgo de que los datos están solo en la memoria de la máquina cliente, con lo que con un corte de energia o fallo del programa se perderían irremediablemente.

Hasta luego.

;)