Запрос на откат транзакции не имеет соответствующей транзакции BEGIN
Я создаю процедуру хранения для чтения типа XML-документа из вторичной таблицы XMLTable. Но при запуске SP или даже самого запроса я получаю следующее сообщение:
"Запрос на откат транзакции не имеет соответствующей транзакции BEGIN."
Код, который я использую, выглядит следующим образом:
--/****** Object: StoredProcedure [dbo].[ImportXMLData] Script Date: 2/8/2018 1:01:51 AM ******/ --SET ANSI_NULLS ON --GO --SET QUOTED_IDENTIFIER ON --GO --CREATE proc [dbo].[ImportXMLData] --as DECLARE @lastid as INT DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX) DECLARE @FileName varchar(500) DECLARE @LoadedDateTime datetime DECLARE @Id int BEGIN DECLARE Cursor01 CURSOR FOR SELECT ID, XMLData, LoadedDateTime, FileName FROM XMLTable WHERE DataImported IS NULL ORDER BY ID --SELECT @XML = XMLData, @FileName = FileName FROM XMLTable OPEN Cursor01 FETCH NEXT FROM Cursor01 INTO @Id, @XML, @LoadedDateTime, @FileName WHILE @@FETCH_STATUS = 0 BEGIN begin try EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML,'<cfdi:Comprobante xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:Emisor="http://www.w3.org/2001/XMLSchema" xmlns:Receptor="http://www.w3.org/2001/XMLSchema" />' insert into InvoiceImport(ImportDateTime,Folio,Fecha,FormaPago,NoCertificado,Total,Moneda,MetodoPago,RFCEmisor,NombreEmisor,RFCReceptor,NombreReceptor,TotalImpuestosTrasladados,SubTotal,UUID,FechaTimbrado,Impuesto,Tasa,ImporteImpuesto,UsoCFDI,Serie,FileName) select @LoadedDateTime,Folio,Fecha,FormaPago,NoCertificado,Total,Moneda,MetodoPago,RFCEmisor,NombreEmisor,RFCReceptor,NombreReceptor,TotalImpuestosTrasladados,SubTotal,UUID,FechaTimbrado,Impuesto,Tasa,ImporteImpuesto,UsoCFDI,Serie,@FileName FROM OPENXML (@hdoc,'/cfdi:Comprobante',2) WITH ( [Folio] VARCHAR(10) '/cfdi:Comprobante/@FOLIO', [Serie] VARCHAR(10) '/cfdi:Comprobante/@SERIE', [Fecha] Datetime '/cfdi:Comprobante/@FECHA', [FormaPago]varchar(4) '/cfdi:Comprobante/@FORMAPAGO', [NoCertificado]varchar(50) '/cfdi:Comprobante/@NOCERTIFICADO', [Total]float '/cfdi:Comprobante/@TOTAL', [Moneda]varchar(4) '/cfdi:Comprobante/@MONEDA', [MetodoPago]varchar(4) '/cfdi:Comprobante/@METODOPAGO', [RFCEmisor]VARCHAR(25) './cfdi:Emisor/@RFC', [NombreEmisor]VARCHAR(50) './cfdi:Emisor/@NOMBRE', [RFCReceptor]VARCHAR(25) './cfdi:Receptor/@RFC', [NombreReceptor]VARCHAR(50) './cfdi:Receptor/@NOMBRE', [TotalImpuestosTrasladados]float './cfdi:IMPUESTOS/@TOTALIMPUESTOSTRASLADADOS', [UUID] varchar(100) './cfdi:Complemento//@UUID', [FechaTimbrado] datetime './cfdi:Complemento//@FECHATIMBRADO', [SubTotal] float '/cfdi:Comprobante/@SUBTOTAL', [Impuesto] float './cfdi:IMPUESTOS//@IMPUESTO', [Tasa] float './cfdi:IMPUESTOS//@TASA', [ImporteImpuesto] float './cfdi:IMPUESTOS//@IMPORTE', [UsoCFDI]VARCHAR(5)'./cfdi:Receptor/@USOCFDI') UPDATE XMLTable SET DataImported = 1 WHERE @FileName = FileName AND XMLTable.DataImported IS NULL end try begin catch if(@@trancount>0) print 'error ocuured' ROLLBACK end catch FETCH NEXT FROM Cursor01 INTO @Id, @XML, @LoadedDateTime, @FileName END CLOSE Cursor01 DEALLOCATE Cursor01 END GO
Что я уже пробовал:
НАЧИНАЙ ТРАН
СОВЕРШИТЬ ТРАН
Использование меньшего количества столбцов во вставке для