Sql server 2008 SQL回滚事务

Sql server 2008 SQL回滚事务,sql-server-2008,tsql,Sql Server 2008,Tsql,我正在尝试删除表中的数据 BEGIN TRAN DELETE FROM TABLEA DELETE FROM TABLEB ROLLBACK TRAN 但是,当我检查表中的数据时,数据确实存在。如果您正在回滚事务,则取消未提交的更改。 如果打开事务、删除和回滚,则数据将存在 如果要提交事务(删除信息),请执行以下操作 替换 ROLLBACK TRAN 与 数据将被删除回滚传输意味着取消事务中所做的所有更改。以下是有关SQL Server中事务的一些说明 事务是单个工作单元。如果事务

我正在尝试删除表中的数据

BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

ROLLBACK TRAN 

但是,当我检查表中的数据时,数据确实存在。

如果您正在回滚事务,则取消未提交的更改。 如果打开事务、删除和回滚,则数据将存在

如果要提交事务(删除信息),请执行以下操作

替换

ROLLBACK TRAN 


数据将被删除<代码>回滚传输意味着取消事务中所做的所有更改。

以下是有关SQL Server中事务的一些说明

事务是单个工作单元。如果事务成功,则事务期间进行的所有数据修改都将提交并成为数据库的永久部分。如果事务遇到错误,必须取消或回滚,则所有数据修改都将被删除

还要记住,使用
事务
会临时锁定表,因此必须小心

 BEGIN TRAN 
    Statement1
    Statement2
 COMMIT TRAN
如果其中一条语句失败或出现错误,
事务
回滚
,并忽略所有语句,不会有任何更改

使用
ROLLBACK TRAN
时,它会删除从
事务开始时所做的所有数据修改
改用
COMMIT TRAN

BEGIN TRY
BEGIN TRAN   

DELETE FROM TABLEA 

DELETE FROM TABLEB  

COMMIT TRAN  
END TRY

BEGIN CATCH
 SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage

 IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION
END CATCH
如果事务中有多个操作,则应始终使用try-catch块回滚事务失败的一部分中的所有操作

BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

ROLLBACK/COMMIT TRAN
--回滚:在名称ROLLBACK中,它将取消进程

--提交:在名称COMMIT中,它将确认流程。

Ahem。。。。。那么你期望什么呢?您正在事务上下文中从两个表中删除。然后回滚该事务—这意味着:在该事务中所做的所有更改都不会应用于数据库。因此,这些数据行并没有真正被删除——这就是事务的全部意义所在!但他说它“确实”存在。。。
BEGIN TRY
BEGIN TRAN   

DELETE FROM TABLEA 

DELETE FROM TABLEB  

COMMIT TRAN  
END TRY

BEGIN CATCH
 SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_LINE() AS ErrorLine
        ,ERROR_MESSAGE() AS ErrorMessage

 IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION
END CATCH
BEGIN TRAN 

DELETE FROM TABLEA
DELETE FROM TABLEB

ROLLBACK/COMMIT TRAN