【问题标题】:SQL Server: How to make a transaction commit fail?SQL Server:如何使事务提交失败?
【发布时间】:2019-10-09 08:05:55
【问题描述】:

为了测试应用程序中的错误处理,我正在寻找一种让事务提交导致错误的方法。

该应用程序是用 C 语言编写的,并使用 ODBC 与 SQL Server 2017 数据源通信。应用程序启动数据库事务并执行任意 SQL(为了测试我可以更改)。然后,它提交事务(使用 ODBC SQLEndTran())。我想构建一个测试来验证提交的错误处理。

有没有一种简单可靠的方法让提交失败,例如在提交之前执行一些特定的 SQL 脚本,或者通过更改数据库或数据源设置?

编辑/澄清:我需要失败的是事务提交本身(特别是 SQLEndTran() 完整的错误调用)。之前的 SQL 应该会成功完成。

【问题讨论】:

    标签: sql-server odbc commit


    【解决方案1】:

    最简单的方法是强制除以零。

    declare @SomeVal int = 0
    set @SomeVal = 2 / @SomeVal
    

    --编辑--

    因为我猜你希望提交失败,你可以简单地在提交之前添加一个回滚。那么commit语句就会抛出异常。

    【讨论】:

    • 谢谢 - 但这会在执行时失败,而不是在事务提交时(这是我需要测试的)。
    • 您希望提交语句失败?不知道有什么不同。
    【解决方案2】:

    如果您能够在测试框架中正确计时,您可以做几件事:
    1. 从测试框架中的单独连接终止会话。
    2. 更改防火墙配置以模拟网络错误。
    3. 将数据库切换到单用户模式或停止SQL服务。

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2015-10-25
      • 2018-04-27
      • 2020-06-23
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多