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