私はポストデプロイメントスクリプトを数回使用しており、ビルドアクション「PostDeploy」を常に直感的に使用しています。ここで初めて、":r somescript.sql"
構文。
すぐにこの行は間違っているとマークされています:
「SQL80001 ':'の横の構文が間違っています」
PDSをビルドアクションを「なし」に設定する提案を見つけました。これは役に立たず、エラーが解消されません。ここで何が欠けていますか?
ビルドプロセス中にエラーが発生し、実際の構文エラーがないと仮定すると、それは簡単です
:r path\to\file.sql
このエラーは、インポートするファイルが存在しない場合にも発生します。ファイルの場所を確認してください。絶対パスを指定しなかった場合、パスはソリューションフォルダーへの相対パスになります(少なくとも私にとっては)。
開発中にビルドプロセスが報告するエラーを確認する場合は、Visual StudioのT-SQLエディターで「SQLCMDモード」を必ず有効にしてください。ボタンバーの右端に「!」が付いたボタンがあります。これを有効にする必要があります。または、[〜#〜] sql [〜#〜]メニューに移動して、Transact-SQL Editor->を選択し、Execution Settings->を選択します。、そして最後にSQLCMDモードを選択します。これで、スクリプトを実行すると、ビルド/パブリッシュプロセスと同じように、:r
が正しく解釈されます。
また、Post Deploy Script(PDS)のBuild Actionを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
も参照してください