バッチに関するドキュメントによると、複数のCREATE TRIGGER
ステートメントを同じバッチに入れることはできません。
CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE SCHEMA、CREATE TRIGGER、および CREATE VIEW ステートメントは、バッチ内の他のステートメントと組み合わせることはできません。CREATE ステートメントでバッチを開始する必要があります。そのバッチに続く他のすべてのステートメントは、最初の CREATE ステートメントの定義の一部として解釈されます。
GO
サーバーに送信されない SSMS、sqlcmd、および SQL Server 開発ツールによって認識されるバッチ区切り文字であるため、機能します。ツールはこれを使用して、テキストをバッチで分割し、1 つずつサーバーに送信します。トランザクションはバッチ間で動作するため (結局のところ同じ接続です)、特定の DDL ステートメントをロールバックすることができます。
Node.js からデータベース作成スクリプトを作成して実行するとします。
1 つの解決策は、SQL Server ツールと同じアプローチです。個別のバッチを生成し、データベースに対して 1 つずつ実行します。
もう 1 つのオプションは、区切り記号を使用して単一の SQL スクリプトを作成し、GO
SQL Server のコマンド ライン ツールを使用して実行することです。これは、スクリプトを保存してバージョンを変更したり、変更を検出したりできるため、より保守性が高くなります。
3 番目のオプションは、SQL Server の開発ツールを使用してデータベースをモデル化することです。データベース プロジェクトは、バージョン管理と検証をサポートしています。ただし、主な利点は、Redgate のツールと同様に、SSDT がターゲット データベースを更新するスクリプトを生成できることです。SSDT は適度にスマートで、ツール自体の内部で実行される名前変更などを認識し、たとえばsp_rename
1 つの列を削除して新しい列を作成する代わりに使用できます。
さらなる利点は、SSDT がdacpac
、ターゲット データベースとの比較と更新スクリプトの生成に使用できるコンパイル済みモデルを生成することです。
これにより、継続的なデータベースの展開が非常に簡単になります。AppVeyor、TFSでサポートされています。TeamCityおよびsqlpackageツールを実行できるツール/サービス。
欠点は、SSDT が SQL Server データベースに対してのみ機能することです。