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


17

ポストポストスクリプトを数回使用し、ビルドアクション "PostDeploy"を常に直感的に使用しました。これで初めて、スクリプトのテンプレートから組み込みの命令に従って":r somescript.sql"構文を使用しようとしました。

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

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

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


申し訳ありませんが、「スクリプトに設定されているアクションには「:r」が含まれていますか?」:)
エドエリオット

回答:


14

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

:r path\to\file.sql

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

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

また、ポストデプロイスクリプト(PDS)のビルドアクションPostDeployに設定する必要があります。Noneに設定されている場合、SSDTビルドプロセスによって完全にスキップされます。


4

有効なエラー

これは、: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モード

こちらもご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.