私はさらに調査を行ったので、これまでに書かれたことを拡張するためにこれを理解しました:
SQLCMDとは
SQLCMD.exe
SQLServer2005以降のインストールに含まれているコンソールユーティリティです。通常、c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE
のようなパスにあります。 。
これは、SQLサーバーに関連するタスクの自動化を可能にするシンプルなスクリプト環境です。たとえば、SQL Serverの特定のインスタンスにログインするスクリプトを記述して実行し、この接続の特定のディレクトリからスクリプトを実行して、出力を特定のファイルに保存できます。
Invoke-Sqlcmd
>
コマンドレットは、このツールを標準化されたPowershellベースのアプローチに置き換え、元の構文と機能のほとんどを保持する手段としてSQLServer2008で導入されました。
SSMSのSQLCMDモードとは
SSMSでは、SQLCMDモード は、sqlcmd.exe環境をシミュレートするスクリプト実行モードであるため、T-SQL言語の一部ではない一部のコマンドを受け入れます。sqlcmd.exe
とは異なります。 、 SqlClientを使用してデータベースに接続します (SSMSと同じ方法) ODBCではありません データプロバイダーであるため、一部の側面では、sqlcmd.exe
とは異なる動作をする可能性があります。 。
SQLCMDモードでスクリプトを実行すると、sqlcmd.exe
に一般的なコマンドを使用できます。 環境。ただし、SQLCMDモードにはIntelliSenseまたはデバッグのサポートがないため、クリーンなT-SQLとSQLCMD固有のコードを組み合わせたスクリプトを維持するのは面倒な場合があります。したがって、必要な場合にのみ使用してください。
ユースケースの例
会社に、名前に環境を含むデータベースの命名規則があるとします。例: MyDb_ Prod 、MyDb_テスト 、 MyDb_ Dev 。この規則は、間違いの可能性を最小限に抑える ために使用される場合があります。 。
開発者がT-SQLスクリプトを作成する場合、展開/テストプロセスのさまざまな環境で実行する必要があります。これには、多くのバージョンのコードが必要になります。
SELECT *
FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod
代わりに、データベース名はデプロイメントプロセスでSQLCMD変数として提供され、すべての環境にまったく同じファイルがデプロイされると想定できます。
-- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS
SELECT *
FROM [$(databaseName)].[dbo].[MyTable1]
(この単純な例では、データベース名を完全に省略できますが、データベース間結合がある場合は、データベース名を使用する必要があります)