Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何回滚隐式SSMS事务(结尾带有go的语句)?_Sql_Sql Server_Sql Server 2008_Transactions_Ssms - Fatal编程技术网

Sql 如何回滚隐式SSMS事务(结尾带有go的语句)?

Sql 如何回滚隐式SSMS事务(结尾带有go的语句)?,sql,sql-server,sql-server-2008,transactions,ssms,Sql,Sql Server,Sql Server 2008,Transactions,Ssms,问题: 通常,可以使用rollback撤消sql命令 BEGIN TRY BEGIN TRANSACTION /* run all your SQL statements */ COMMIT TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION END CATCH 我现在的问题是: 如果是“一”干的 UPDATE TABLE_X SET FIELD_X = 'bla' GO 在SSMS(注意末尾的go)中,忘记指定WHERE

问题:
通常,可以使用rollback撤消sql命令

BEGIN TRY
  BEGIN TRANSACTION
  /* run all your SQL statements */
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
END CATCH
我现在的问题是:
如果是“一”干的

UPDATE TABLE_X SET FIELD_X = 'bla'
GO
SSMS(注意末尾的go)中,忘记指定WHERE子句, 是否可能(以及如何)回滚SSMS在其中执行此命令的隐式事务(在事务中隐式执行结尾带有go的语句)

注:
我没有这样做,但我的一位同事几天前(未经批准)这样做了。

我解开了他造成的伤害(幸运的是,我在他做那件事之前0.5小时做了一次备份),但对于未来来说,知道这件事会很好,因为这件事也曾发生在我身上。

不,你不能,不容易。从备份恢复是最好的选择

请看下面的链接,我想它会对您有所帮助

谢谢
Arun不指定隐式事务的结束,而是指定批处理的结束。这就是为什么在
GO
之后,您(不幸地)无法
回滚
您的
更新

从打开的
转到

GO不是Transact-SQL语句;这是一个由用户识别的命令 sqlcmd和osql实用程序以及sqlserver管理工作室代码 编辑

SQL Server实用程序将GO解释为它们应该发送的信号 SQL实例的当前Transact-SQL语句批 服务器。当前一批语句由所有语句组成 自上次GO或自临时会话开始后输入,或 如果这是第一次尝试,请编写脚本

如果已指定启用
SET implicit_TRANSACTIONS,则
UPDATE
命令将仅被视为隐式事务的开始(请参阅)。在这种情况下,许多命令(
CREATE
DELETE
UPDATE
等)将自动启动一个新的隐式事务,并且在发出
ROLLBACK
COMMIT
之前,该事务不会结束


(有关SQL Server中事务和批处理之间的差异的更多信息,请参见ServerFault上的这个问题:)

噢,是同事吗?:)@波迪卢斯卡:xD,真的!我知道更新有多危险,因为大约一年前,包含翻译的表也发生了同样的事情(从我知道以来,根本的问题是这个思维过程:这只是一个更新,可能会出错……)您始终可以自定义默认SSMS新查询模板,以包括
begin tran;回滚事务
True,OP显然意味着自动提交事务。隐式事务不会自动提交。是的,您可以。但事实并非如此;)