トランザクションでDDL文を実行するためのスクリプト

私は、トランザクションスコープで一連のDDL文を実行しようとしています。モデルの変更要求に関連するすべてのステートメントを1つのトランザクションとして実行しようとしているため、すべてのDDLステートメントが同時に失敗または成功するようになっています。私の目的は、DDL文のグループを実行した後に、一貫性のない文でDBを残さないことです。

私は、SQL Server 2008 R2がDDLステートメントのトランザクションをサポートしていることを発見しました。私はDROP DBの種類のDDL文については言及していません - 私はCREATE TABLE、ALTER TABLE、DROP TABLEなどを指しています。

私は以下の関連スレッドを読んだが、答えは見つからなかった。

可能ですか? (SQL Server内の)トランザクション内で複数のDDL文を実行しますか?

DDLステートメントのユニットテストトランザクション

トランザクションブロック内のDDLスクリプトエラーがあっても有効です。

What I need is a template script for executing a set of DDL statements as a transaction and to roll them back if one of the statements fail and I want the error to be printed or to be stored in an error table. Can anyone help?

私の研究では、私は複数の選択肢を見つけましたが、私はこの分野で新しいものとしてどのものを選ぶべきかわかりません。私は経験豊富な手の助けが必要です。

  1. トランザクションスコープでXACT_ABORTを使用して、トランザクション内の最初のエラーを中止します。
  2. TRYブロックとCATCHブロックを使用し、TRYブロック内のトランザクション内にDDLステートメントを配置します。

ここで私が読んだページがあります。

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

1

1 答え

Red Gate SQLをダウンロードし、そこにスクリプトがどのように生成されているかを確認してください。

これはトランザクションDDLを行い、ロギングのために拡張することができます。

TRY/CATCHは動的SQLなしで使用するのが難しいバッチにまたがることはありません

1
追加された
提案に感謝します。私はレッドゲートの製品を見ていきます。
追加された 著者 Siraj Samsudeen,