1. ホーム
  2. sql-server

[解決済み] SQL Serverです。バッチ処理(GO)は何のためにあるのですか?

2023-03-14 19:46:42

質問

私は、SQL Serverにおいて GO はバッチセパレータとみなされます。 .

私の質問は バッチセパレータを持つ意味は何ですか? どんな利点があり、なぜそれを使いたいのでしょうか?

例 以下のようにSQLコードで使用されているのをよく見かけますが、なぜそれがベストプラクティスとみなされるのかがわかりません。私が見る限り、このコードは、すべての GO ステートメントがなくても同じです。

USE AdventureWorks2012;
GO
BEGIN TRANSACTION;
GO
IF @@TRANCOUNT = 0
BEGIN
    SELECT FirstName, MiddleName 
    FROM Person.Person WHERE LastName = 'Adams';
    ROLLBACK TRANSACTION;
    PRINT N'Rolling back the transaction two times would cause an error.';
END;
ROLLBACK TRANSACTION;
PRINT N'Rolled back the transaction.';
GO

(出典 テクネットドキュメント ):

どのように解決するのですか?

この例では、何の役にも立ちません。

多くのステートメントは、バッチ内の唯一のものでなければなりません。

例えば CREATE PROCEDURE .

また、スキーマを変更した後(既存のテーブルに新しいカラムを追加するなど)、新しいスキーマを使用するステートメントは、別のバッチで別々にコンパイルされなければならないことがよくあります。

で区切られた別々のバッチを提出することは、一般的に代替案となります。 GO を使って子バッチでSQLを実行することです。 EXEC