Cuántas veces nos hemos encontrado en la situación de tener que insertar varias filas en la base de datos?
Muchas veces seguro.
Y cómo lo has solucionado?
No me vayas a decir que hiciste un bucle del 1 al 1000 en tu aplicación para que se comunique con la base de datos tantas veces como filas tenías ah?
For i = 1 to inCantFilas
InsertRow("Dato1","Dato2","Dato3",....,"DatoN")
Next i
Eso no se hace!!
Bueno, si hiciste eso... no lo vuelvas a hacer... nadie se enteró de ello, pero si aún puedes, corrígelo.
Por qué? 3 grandes motivos:
1.- Performance de tu aplicación.
2.- Reducción en el tráfico de red.
3.- Nos hace sentir mejor el hacer las cosas bien.
Así es, insertar varias filas en una base de datos se puede hacer de un sólo viaje.
SQL SERVER usa lo siguiente para ello:
sp_xml_preparedocument
OPENXML
sp_xml_removedocument
Y así, conviertes la operación en un juego de niños.
Empecemos con el juego:
Para este ejemplo vamos a suponer que tienes una tabla llamada NewTable con tres campos(CustomerID, Contactname, OrderDate) en la base de datos... y por qué vamos a suponer eso?? porque se supone que quieres insertar varios registros en una tabla que ya existe!! y si no la tienes: créala!!
Digamos que tienes un datagrid con varias filas (podrían ser 1000 filas) y, digamos que quieres insertar toda esas filas de un pepo en la base de datos.
Lo único que tenemos que hacer es darle la forma de un documento XML
El cual se lo pasamos a este procedimiento
Y, en el servidor necesitaremos un procedimiento almacenado que reciba esa info.
En realidad, es en el contenido del procedimiento almacenado en lo que debemos concentrarnos... que en realidad es muy simple, explicaré en qué consiste:
La variable @MyXML es la que recibirá el XML desde la aplicación ok?
Antes de poder usar la variable @MyXML, necesitamos preparar el documento XML, lo cual lo hacemos con el procedimiento almacenado sp_xml_preparedocument.
Luego, creamos una tabla temporal (#Temporal), donde previamente guardaremos los datos del XML, esto lo hacemos con la función OPENXML.
Luego de guardar la data en la tabla #Temporal, removemos las referencias al XML de memoria usando sp_xml_removedocument.
Finalmente, insertamos en nuestra tabla NewTable, los datos que previamente guardamos en la tabla #Temporal,usando:
INSERT INTO NewTable
SELECT * FROM #Temporal
Está casi todo explicado verdad?
Me olvidaba de la parte que dice '/Customers/Customer' ... es simplemente la ruta del XML desde donde extraeremos los registros.
Como han visto, insertar varias filas a la vez en una tabla es una tarea sencilla.
1 comentario:
Muy buen articulos, justo eso es lo ando buscando, pero quiero insertarselo en mi aplicacion, si me puede enviar el codigo fuente te lo agredeceria mucho...
edwarpun@hotmail.com
Publicar un comentario