ポストポストスクリプトを数回使用し、ビルドアクション "PostDeploy"を常に直感的に使用しました。これで初めて、スクリプトのテンプレートから組み込みの命令に従って":r somescript.sql"
構文を使用しようとしました。
すぐにこの行は間違っているとマークされています:
「 ':'の横にあるSQL80001の構文が間違っています」
PDSをビルドアクション「なし」に設定する提案を見つけました。これは役に立たず、エラーは残ります。ここに何が欠けていますか?
ポストポストスクリプトを数回使用し、ビルドアクション "PostDeploy"を常に直感的に使用しました。これで初めて、スクリプトのテンプレートから組み込みの命令に従って":r somescript.sql"
構文を使用しようとしました。
すぐにこの行は間違っているとマークされています:
「 ':'の横にあるSQL80001の構文が間違っています」
PDSをビルドアクション「なし」に設定する提案を見つけました。これは役に立たず、エラーは残ります。ここに何が欠けていますか?
回答:
ビルドプロセス中にエラーが発生し、実際の構文エラーがなく、それが単純であると仮定します
:r path\to\file.sql
インポートされるファイルが存在しない場合にもエラーが発生します。ファイルの場所を確認してください。絶対パスを指定しなかった場合、パスはソリューションフォルダーからの相対パスになります(少なくとも私にとっては)。
開発中に、ビルドプロセスが報告するエラーを確認する場合は、Visual StudioのT-SQLエディターで「SQLCMDモード」を有効にしてください。ボタンバーの右端に「!」が付いたボタンがあります その中にこれを有効にする必要があります。または、[ SQL ]メニューに移動し、[ Transact-SQLエディター]-> [ 実行設定]-> [ SQLCMDモード]を選択します。これで、スクリプトを実行すると:r
、ビルド/発行プロセスと同様に、スクリプトが正しく解釈されます。
また、ポストデプロイスクリプト(PDS)のビルドアクションをPostDeployに設定する必要があります。Noneに設定されている場合、SSDTビルドプロセスによって完全にスキップされます。
有効なエラー
これは、: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
SSMS 17、SSMS 18
こちらもご覧ください