ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION [英] The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION

查看:207
本文介绍了ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个存储过程来从辅助XMLTable读取XML文档类型。但是当运行SP甚至查询本身时,我收到以下消息:



ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION。



我使用的代码如下:



I'm building an store procedure to read an XML document type from a secondary XMLTable. But when running the SP or even the query by itself I get the following message:

"The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION."

The code I'm using is as follows:

--/****** 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





我尝试过:



BEGIN TRAN

COMMIT TRAN

使用较少的colu mns插入到



What I have tried:

BEGIN TRAN
COMMIT TRAN
Using less columns in the insert to

推荐答案

查看错误消息:

Look at the error message:
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION

这可能不是更具体!

您的Catch块中的ROLLBACK没有BEGIN TRANS - 根本没有任何交易,除了ROLLBACK,您也没有COMMIT!



要回滚一个事务,你必须开始一个事务,对数据库进行更新,并在它工作时提交它,或者当它没有时回滚它。

It couldn't be more specific!
Your ROLLBACK in your Catch block has no BEGIN TRANS - there is no transaction there at all, except the ROLLBACK, you have no COMMIT either!

To roll back a transaction, you have to begin a transaction, do the updates to the DB, and commit it when it works or roll it back when it doesn't.


BEGIN TRY
    BEGIN TRAN

   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" />'

INERT 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

            COMMIT TRAN;
		END TRY

	BEGIN CATCH
		
		IF(@@trancount<>0)
		print 'error ocuured'
		ROLLBACK TRAN;

	END CATCH


这篇关于ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆