【问题标题】:Script for running DDL statements in a transaction用于在事务中运行 DDL 语句的脚本
【发布时间】:2011-11-25 09:25:20
【问题描述】:

我正在尝试在事务范围内执行一堆 DDL 语句。我正在尝试将与模型更改请求相关的所有语句作为单个事务执行,以便所有 DDL 语句一起失败或成功。我的目标不是在执行 DDL 语句组后将数据库留在不一致的语句中。

我发现 SQL Server 2008 R2 支持 DDL 语句上的事务。我不是在谈论 DROP DB 类型的 DDL 语句 - 我指的是 CREATE TABLE、ALTER TABLE、DROP TABLE 等。

我已阅读以下相关主题,但没有找到答案。

Is it possible to run multiple DDL statements inside a transaction (within SQL Server)?

Unit testing DDL statements that need to be in a transaction

DDL scripts in a transaction block takes effect even when there are errors

我需要一个模板脚本,用于将一组 DDL 语句作为事务执行,并在其中一个语句失败时回滚它们,我希望打印或存储错误在错误表中。任何人都可以帮忙吗?

在我的研究中,我找到了多种选择,但我不确定该选择哪一种,因为我是该领域的新手。我需要经验丰富的人的帮助。

  1. 在事务范围内使用 XACT_ABORT 在事务中出现第一个错误时中止
  2. 使用 TRY 和 CATCH 块并将 DDL 语句放入 TRY 块内的事务中

这是我已阅读的页面。

http://msdn.microsoft.com/en-us/library/ms179296.aspx

http://msdn.microsoft.com/en-us/library/ms188792.aspx

http://www.codeproject.com/KB/database/sqlservertransactions.aspx

【问题讨论】:

    标签: sql-server sql-server-2008-r2


    【解决方案1】:

    下载 Red Gate SQL 比较,看看那里的脚本是如何生成的。

    这会执行事务性 DDL,并且可以扩展为日志记录。

    TRY/CATCH 不跨越批次,这使得在没有动态 SQL 的情况下使用起来更加棘手

    【讨论】:

    • 感谢您的建议。我来看看红门的产品。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2010-10-27
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多