Usa de Transacciones

10/01/2007 - 17:07 por Omar | Informe spam
Que tal, el motivo de este mail es para pedir ayuda respecto al uso de
transacciones, a continuación explico mi problema.

Tengo que realizar una aplicación que lea los datos de un archivo de
texto con el siguiente formato:

01/01/2007*123456*121
01/01/2007*123456*1654
01/01/2007*123456*123444
.

Este archivo se debe de cargar por día y me tengo que asegurar que todos
y cada uno de los datos del archivo se guardaron en la BD, es decir, lo
que hago es leer líea por línea el archivo y después separo la
información para guardarla en los campos correspondientes de la BD, al
momento de ir separando la información la voy guardándo en la bd con un
sp que muestro en la parte de abajo, pero yo necesito asegurarme que
cada una de las líeas del archivo se gurdó correctamente en el archivo
de texto es decir que si al leer la última línea hubo un error y ese
registro no se pudo guardar en la BD por x motivo, entonces hacer que
los demas tampoco se guarden en la BD para así volver a cargar el
archivo hasta que todos los datos se guarden correctamente, entonces
creo que para realizar esto es necesario implementar transacciones
entonces mi pregunta es:

Para que esto suceda tan solo es necesario hacer lo siguiente dentro de
mi sp?

/*Bastaría utilizar BEGIN TRAN y COMMIT TRAN dentro de este sp para
asegurarme que todos y cada uno de los datos del archivo de texto fueron
guardados en la BD?


CREATE PROCEDURE pc_Transaccion
@cDepdate varchar(20),
@ccustid varchar(20),
@crefnbr varchar(20)
AS
BEGIN TRAN
INSERT INTO Transaccion (cDepdate, ccustid, crefnbr)
VALUES (@cDepdate, @ccustid, @crefnbr)
COMMIT TRAN

Se les agradecería mucho cualquier ayuda al respecto.

Preguntas similare

Leer las respuestas

#1 Omar
10/01/2007 - 18:36 | Informe spam
Isaias escribió:
Omar

Para subir informacion a tu base de datos que este alojada en archivos texto
plano, debes utilizar BULK INSERT (BCP.EXE o DTS), lo subes a una tabla de
paso y de ahi, aplicas directamente a tus tablas destino.

No requieres de realizar ninguna aplicacion para leer tus archivos
linea-a-linea y subirlos a tu base.



Que tal Isaias, gracias por tu respuesta, pero serías tan amable de
pasarme algún link o algún ejemplo de como usar el BCP.

Muchas gracias.
Respuesta Responder a este mensaje
#2 Jose Mariano Alvarez
10/01/2007 - 19:33 | Informe spam
Tambien puedes usar BULK INSERT (esta en la ayuda la sintaxis completa) en
lugar de BCP.EXE

Si solo insertas esos registros con una sola instruccion como te mostro no
precisas BEGIN TRAN no COMMIT TRAN.

Por otro lado si los usas debes controlar los errores dentro de la
transaccion.




Saludos
Ing. Jose Mariano Alvarez


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




"Omar" wrote in message
news:%23u$
Isaias escribió:
Omar

Para subir informacion a tu base de datos que este alojada en archivos
texto plano, debes utilizar BULK INSERT (BCP.EXE o DTS), lo subes a una
tabla de paso y de ahi, aplicas directamente a tus tablas destino.

No requieres de realizar ninguna aplicacion para leer tus archivos
linea-a-linea y subirlos a tu base.



Que tal Isaias, gracias por tu respuesta, pero serías tan amable de
pasarme algún link o algún ejemplo de como usar el BCP.

Muchas gracias.
Respuesta Responder a este mensaje
#3 Omar
10/01/2007 - 20:34 | Informe spam
Jose Mariano Alvarez escribió:
Tambien puedes usar BULK INSERT (esta en la ayuda la sintaxis completa) en
lugar de BCP.EXE

Si solo insertas esos registros con una sola instruccion como te mostro no
precisas BEGIN TRAN no COMMIT TRAN.

Por otro lado si los usas debes controlar los errores dentro de la
transaccion.




Que tal, ya probe usar BULK INSERT, solo que necesito hacer esto
dinámico es decir desde mi aplicación ejecutar un sp que contenga BULK
INSERT y ha este procedimiento pasarle como parámetro la ruta de donde
debe de leer el archivo, por lo cual he creado dicho sp, el cual es el
siguiente:

CREATE PROCEDURE pc_subir
@ruta varchar(20)
AS
BULK INSERT BCP FROM @ruta
WITH
(
FIELDTERMINATOR = '*',
ROWTERMINATOR = ''
)
GO

pero me marca el error: "Incorrect syntax near'@ruta'" que supongo es
por que faltan los carateres " ' ", entonces ahora les pido su valiosa
ayuda para ver como puedo pasar como parámetro la ruta.

Muchas gracias.
Respuesta Responder a este mensaje
#4 Jose Mariano Alvarez
11/01/2007 - 14:41 | Informe spam
Debes usar EXEC en ese caso.
Verifica que no te inyecten codigo si hay intervencion del usuario



Saludos
Ing. Jose Mariano Alvarez


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




"Omar" wrote in message
news:%
Jose Mariano Alvarez escribió:
Tambien puedes usar BULK INSERT (esta en la ayuda la sintaxis completa)
en lugar de BCP.EXE

Si solo insertas esos registros con una sola instruccion como te mostro
no precisas BEGIN TRAN no COMMIT TRAN.

Por otro lado si los usas debes controlar los errores dentro de la
transaccion.




Que tal, ya probe usar BULK INSERT, solo que necesito hacer esto dinámico
es decir desde mi aplicación ejecutar un sp que contenga BULK INSERT y ha
este procedimiento pasarle como parámetro la ruta de donde debe de leer el
archivo, por lo cual he creado dicho sp, el cual es el siguiente:

CREATE PROCEDURE pc_subir
@ruta varchar(20)
AS
BULK INSERT BCP FROM @ruta
WITH
(
FIELDTERMINATOR = '*',
ROWTERMINATOR = ''
)
GO

pero me marca el error: "Incorrect syntax near'@ruta'" que supongo es por
que faltan los carateres " ' ", entonces ahora les pido su valiosa ayuda
para ver como puedo pasar como parámetro la ruta.

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