【发布时间】: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 语句作为事务执行,并在其中一个语句失败时回滚它们,我希望打印或存储错误在错误表中。任何人都可以帮忙吗?
在我的研究中,我找到了多种选择,但我不确定该选择哪一种,因为我是该领域的新手。我需要经验丰富的人的帮助。
- 在事务范围内使用 XACT_ABORT 在事务中出现第一个错误时中止
- 使用 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