【问题标题】:How do you disable autocommit in azure data studio如何在 azure data studio 中禁用自动提交
【发布时间】:2021-04-13 06:14:16
【问题描述】:

我们使用 Azure Data Studio 进行 SQL Server 查询。但是,它会自动提交所有内容,我找不到禁用它的选项。 我找到了这个页面https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/setting-the-commit-mode?view=sql-server-ver15,但我在连接设置中找不到任何可以设置 SQL_ATTR_AUTOCOMMIT 属性的地方

【问题讨论】:

  • 也许更好的解决方案是,如果您确实需要将所有内容包装在单个事务中,则明确声明您的事务。
  • 关闭它真的很糟糕,因为您会经常挂起交易。使用显式事务
  • 当您尝试更改数据的查询并得出结论认为它没有按照您的意愿执行时,该怎么办?您不能回滚,因为事务已经提交。人类会犯错……
  • 所以你宁愿让其他人陷入僵局,@MartijnVanLoocke?在更改 tom 数据之前检查您的工作;这是基础之一。
  • 我不在生产服务器上尝试。这是在我是唯一用户的本地服务器上。

标签: sql-server azure-data-studio


【解决方案1】:

自动提交是 SQL Server 中的默认行为,将其关闭设置implicit_transactions on:

为连接设置 BEGIN TRANSACTION 模式为隐式。

打开时,系统处于隐式事务模式。这意味着 如果@@TRANCOUNT = 0,则以下任何 Transact-SQL 语句 开始新的交易。它相当于一个看不见的 BEGIN TRANSACTION 首先执行:

  • 更改表
  • 获取
  • 撤销
  • 开始交易
  • 授予
  • SELECT(请参阅下面的例外情况。)
  • 创建
  • 插入
  • 截断表格
  • 删除
  • 打开
  • 更新
  • 丢弃

当关闭时,前面的每个 T-SQL 语句都由一个 看不见的 BEGIN TRANSACTION 和看不见的 COMMIT TRANSACTION 语句。 当关闭时,我们说事务模式是自动提交。如果你的 T-SQL 代码明显发出一个BEGIN TRANSACTION,我们说事务模式 是明确的。

所以只需打开一个查询窗口(会话)并运行:

set implicit_transactions on

在 Azure Data Studio 中,您可以在此处默认设置:

但是,如果您这样做了,并且您正在编写一个可重用的脚本,请记住将设置添加到脚本本身,这样其他用户就不会以不同的事务行为运行它。

【讨论】:

  • 所以我每次打开连接时都必须手动执行此操作?我非常不同意设置禁用它是一个不好的功能。我曾经在 SQLDeveloper 中使用 Oracle DB 工作,我会在那里手动提交。如果我想创建一个作为其一部分提交的脚本,我添加“commit;”这已经足够了。今天我不小心删除了行,因此无法回滚。
  • 在 Windows 上你可以使用 SSMS,它有这个设置。 docs.microsoft.com/en-us/sql/ssms/…
  • 是的,我看到了。但它是一个复杂得多的工具,微软建议迁移到 Azure Data Studio。所以我希望它能够提供相同的选项。
  • Microsoft 不“建议迁移到 Azure Data Studio” SSMS 仍在积极开发中,并且拥有庞大的用户群。 docs.microsoft.com/en-us/sql/azure-data-studio/… 但您可以在此处申请 Data Studio 的新功能:github.com/microsoft/azuredatastudio/issues
  • 它就在那里。我只是错过了。查看更新的答案。
猜你喜欢
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2021-09-05
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多