0

Visual Studio SQL データベース プロジェクトの配置前スクリプトでファイルをコピーしようとしています。

:!!copy $(DataFileDirectory)\data.csv $(DataDestinationDirectory)

これによりエラーが発生することがわかりました:

SQL72007: 構文チェックに失敗しました '近くの構文が正しくありません'。近くのバッチで: ':!!copy

だから私は自分のテストを簡素化しようとし、試しました:

:!! dir

これも失敗しました:

SQL72007: 構文チェックに失敗しました '近くの構文が正しくありません'。近くのバッチで: ':!! dir

試してみると失敗します:

!! dir

次のようなコマンドを実行できます。

:r .\myfile.sql 

いつでも次のエラーが発生することに気付きました:!!

72006: 致命的なスクリプト エラー: Command Execute はサポートされていません。

コマンドの実行 ( :!!) がサポートされていないのはなぜですか?

4

1 に答える 1

5

もちろん、これは SSDT の設計者だけが真に答えることができます。SQL Server 自体を実行しているユーザーのアカウントで、データベース サーバーの OS で任意のコマンドを実行できます。

このコマンドを使用すると、同じ理由で、コマンド ライン オプションを使用してandコマンドsqlcmd.exeを無効にすることができます。:!!:ed-X

スクリプトで OS コマンドを本当に実行する必要がある場合は、フォールバックすることもできますがxp_cmdshell、もちろんこれにも問題がありますが、少なくともサーバーの管理者はそれを許可するかどうかを決定できます。

SSDT のデプロイ前またはデプロイ後のスクリプトがサポートしていない SQLCMD 構文オプションは他にもたくさんあります (たとえば:connect、 or:on errorのようです)。したがって、別の説明は、展開スクリプトの目的のために、:rおよび:setvarコマンドで十分であると見なされたということです。

于 2013-02-22T18:07:07.573 に答える