web-dev-qa-db-ja.com

SQLスクリプトのエラー:バッチごとに1つのステートメントのみが許可されます

PostDeploymentのDACPACで実行したい4つのsqlスクリプトがありますが、そのうち3つのVSプロジェクトをビルドしようとすると、次のエラーが表示されます。

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

スクリプトには、DBの異なるテーブルにあるINSERTステートメントのみが含まれます。そして、それらはすべてそのように構成されています

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

異なるテーブル上および異なるデータ上でのみ。

私の質問は、構文と操作の点ですべてのスクリプトが同じであるのに、なぜそれらのうち3つについてVSが不満を言うのですか?

PS:エラーが示唆するように、ステートメントの間に「GO」を追加しても何もしません。

111
Cosmin Ionascu

問題が見つかりました。 VSにファイルを追加したときに、Build Action = Noneファイルプロパティから。この変更により問題が修正され、プロジェクトがコンパイルされます。

262
Cosmin Ionascu

とにかく、これはかなり古いように思えますが、私もそれを数時間使い続けており、この方法は多くの人に役立つと思います。

Database projectBuildとして設定されたファイルはデータベース構造とみなされるため、設計上、このようなファイルでは1つのステートメントのみが許可されます。 Goも他のバッチターミネータもその動作を変更しますが、そのメッセージは間違いです。詳細 こちら

そのようなプロジェクトのファイルには、他にも多くのビルドオプションがあります。あなたの場合、PostDeployのようです。そのようなファイルでは、insertsなどのようなさまざまなコマンドを使用できます。

次に、データベースプロジェクトの出力をデータ層DBアプリケーションのdacpacファイルとして使用できます(それ以外の場合は含まれません)。

7
Jaroslav Kadlec