web-dev-qa-db-ja.com

展開後スクリプトで:r SQLCMDコマンドが間違っているとマークされるのはなぜですか?

私はポストデプロイメントスクリプトを数回使用しており、ビルドアクション「PostDeploy」を常に直感的に使用しています。ここで初めて、":r somescript.sql"構文。

すぐにこの行は間違っているとマークされています:

「SQL80001 ':'の横の構文が間違っています」

PDSをビルドアクションを「なし」に設定する提案を見つけました。これは役に立たず、エラーが解消されません。ここで何が欠けていますか?

21
Magier

ビルドプロセス中にエラーが発生し、実際の構文エラーがないと仮定すると、それは簡単です

:r path\to\file.sql

このエラーは、インポートするファイルが存在しない場合にも発生します。ファイルの場所を確認してください。絶対パスを指定しなかった場合、パスはソリューションフォルダーへの相対パスになります(少なくとも私にとっては)。

開発中にビルドプロセスが報告するエラーを確認する場合は、Visual StudioのT-SQLエディターで「SQLCMDモード」を必ず有効にしてください。ボタンバーの右端に「!」が付いたボタンがあります。これを有効にする必要があります。または、[〜#〜] sql [〜#〜]メニューに移動して、Transact-SQL Editor->を選択し、Execution Settings->を選択します。、そして最後にSQLCMDモードを選択します。これで、スクリプトを実行すると、ビルド/パブリッシュプロセスと同じように、:rが正しく解釈されます。

また、Post Deploy Script(PDS)のBuild ActionPostDeployに設定する必要があります。 Noneに設定されている場合、SSDTビルドプロセスによって完全にスキップされます。

18
Solomon Rutzky

有効なエラー

それの訳は :r somescript.sqlは有効なSQLではありません。構文エラーが表示されます。これは、エラーメッセージに示されているとおりです。

SQL80001: ':'付近の構文が正しくありません。

SQLCMDモード

配置後スクリプトは、SQLCMDモードで実行されます。

Sqlcmdユーティリティを使用すると、コマンドプロンプト、SQLCMDモードのクエリエディター、Windowsスクリプトファイル、またはSQL Serverのオペレーティングシステム(Cmd.exe)ジョブステップで、Transact-SQLステートメント、システムプロシージャ、およびスクリプトファイルを入力できます。エージェントの仕事。このユーティリティは、ODBCを使用してTransact-SQLバッチを実行します。

解決

DBに接続してVisual Studioからsqlを実行できることを覚えておいてください。 SSMS内で同じスクリプトを開いた場合、この同じ構文エラーが表示されます。ただし、SSMSとVisual Studioの両方で、SQLCMDモードを「有効」にすることができます。

VS 2017

  • sQLスクリプトを含むエディターを右クリック
  • 実行設定をクリックします
  • sQLCMDモードをクリックします
  • SQLメニューから同じことができることに注意してください

SSMS 17、SSMS 18

  • クエリ(メニュー項目)
  • SQLCMDモード

も参照してください

6
Seth Flowers