Devolver registros no insertados

25/06/2004 - 14:59 por betobd | Informe spam
Hola a todos

Tengo un SP, al que le paso XML, para hacer actulización en batch. El
XML viene de un Datatable donde de acuerdo al campo
"descripcion_paro_produccion", cuando tenga el valor 'INSERT', hará
el INSERT INTO respectivo. Hasta aqúí funciona fenomenal. El problema
que tengo es que aveces unos registros no se pueden insertar por
integridad de datos, y cancela toda la insercíón. Lo que yo quisiera
es: insertar TODOS LOS REGISTROS POSIBLES, y de alguna manera saber
cuales registros NO fueron insertados, para devolverlos al usuario
para que tome nota de lo ocurrido. Alguien sabe cómo podría devolver
solo las filas que fallan en la insersión.

Muy agradecido

-
ALTER PROCEDURE dbo.MN_SAV_PARO_PRODU_HILA
@xml_data NTEXT
AS

BEGIN

BEGIN TRANSACTION tranMaquinaParo

DECLARE @hDoc INT
EXECUTE SP_XML_PREPAREDOCUMENT @hDoc OUTPUT, @xml_data

INSERT INTO NM_MaquinaParo (codigo_linea, codigo_tipo_maquina,
codigo_paro_produccionD, codigo_maquina,
revision_maquina, fecha_inicio,
fecha_fin, hora_inicio,
hora_fin, usuario_creacion, fecha_creacion)
SELECT XMLParo.codigo_linea, XMLParo.codigo_tipo_maquina,
XMLParo.codigo_paro_produccionD,
XMLParo.codigo_maquina, XMLParo.revision_maquina,
CONVERT(DATETIME,XMLParo.Fecha_Inicio,103),
CONVERT(DATETIME,XMLParo.Fecha_Fin,103), XMLParo.hora_inicio,
XMLParo.hora_fin,
XMLParo.usuario_creacion, GETDATE()
FROM OPENXML (@hdoc, '/root/Table1',2)
WITH (codigo_linea VARCHAR(20), codigo_tipo_maquina VARCHAR(20),
codigo_paro_produccionD VARCHAR(20), codigo_maquina VARCHAR(20),
revision_maquina INT, Fecha_Inicio VARCHAR(20),
Fecha_Fin VARCHAR(20), hora_inicio CHAR(5),
hora_fin CHAR(5), usuario_creacion CHAR(10), fecha_creacion CHAR(8)
,descripcion_paro_produccion VARCHAR(20)) XMLParo
WHERE XmlParo.descripcion_paro_produccion='INSERT'

EXECUTE sp_xml_removedocument @hDoc

IF @@ERROR <> 0
ROLLBACK TRANSACTION tranMaquinaParo
ELSE
COMMIT TRANSACTION tranMaquinaParo
 

Leer las respuestas

#1 Isaías
25/06/2004 - 16:52 | Informe spam
Cree una tabla IMAGEN de NM_MaquinaParo_Paso, he inserte
ahi todos los registros que no fueron aceptados en
NM_MaquinaParo, para que al finalizar, simplemente de un
select * from NM_MaquinaParo_Paso

Preguntas similares