Hola a todos.
Gracias a vuestra ayuda he conseguido q funcione el procedimiento pero no
estoy seguro si estoy haciendo las transacciones de la manera correcta.Como
se podria mejorar el procedimiento?
El codigo esta un poco sucio y seguramente no muy bien hecho ;-):
CREATE PROC [sam_user].[pedidos_grabarPedido]
@xmlPedido nText, -- XML con los datos del pedido
@pped_observacion varchar(50), -- Observaciones
@ppedt_id varchar(50) -- Tipo de pedido
AS
BEGIN TRAN
declare @id_pedido int
insert into TBL_PEDIDOS
(
ped_observacion,
pedt_id
)
values
(
@pped_observacion,
@ppedt_id
)
set @id_pedido = @@IDENTITY
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
articulos
-
Declare @hDoc int
exec sp_xml_preparedocument @hDoc OUTPUT,@xmlPedido
Insert Into TBL_PEDIDOS_ARTICULOS
SELECT @id_pedido , (select art_id from tbl_articulos where art_codigo XMLArticulos.art_codigo), pedart_cantidad
FROM OPENXML (@hdoc, '/rootPedido/CONSULTA/CONSULTA',2)
WITH (art_codigo varchar(10) , pedart_cantidad varchar(100))
XMLArticulos
EXEC sp_xml_removedocument @hDoc
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
Consignatarios -
Declare @hDocC int
exec sp_xml_preparedocument @hDocC OUTPUT,@xmlPedido
Insert Into TBL_PEDIDOS_CONSIGNATARIOS
SELECT @id_pedido , (select con_id from tbl_consignatarios where
con_codDelegado = XMLConsignatarios.con_codDelegado)
FROM OPENXML (@hDocC, '/rootPedido/Pedidos/Consignatarios',2)
WITH (con_codDelegado varchar(10)) XMLConsignatarios
EXEC sp_xml_removedocument @hDocC
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
-
-
INSERT INTO TBL_PEDIDOS_ARTICULOS_CONSIGNATARIOS
select * from vPedidos_Articulos_Consignatarios where ped_id=@id_pedido
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
END
COMMIT TRAN
GO
Muchas gracias a todos.
Leer las respuestas