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