Invoke-Sqlcmd コマンドレットInvoke-Sqlcmd cmdlet

Invoke-Sqlcmd は、SQL ServerSQL Server コマンドレットであり、言語 (Transact-SQLTransact-SQL と XQuery) のステートメントと sqlcmd ユーティリティでサポートされているコマンドを含んだスクリプトを実行します。Invoke-Sqlcmd is a SQL ServerSQL Server cmdlet that runs scripts that contain statements from the languages (Transact-SQLTransact-SQL and XQuery) and commands that are supported by the sqlcmd utility.

Invoke-Sqlcmd の使用Using Invoke-Sqlcmd

Invoke-Sqlcmd コマンドレットを使用すると、Windows PowerShell 環境で sqlcmd スクリプト ファイルを実行できます。The Invoke-Sqlcmd cmdlet lets you run your sqlcmd script files in a Windows PowerShell environment. sqlcmd で実行できる処理の多くは、 Invoke-Sqlcmdを使用しても実行できます。Much of what you can do with sqlcmd can also be done using Invoke-Sqlcmd.

次の例では、Invoke-Sqlcmd を呼び出して単純なクエリを実行しています。これは、 sqlcmd-Q および -S オプションを指定する場合と同様です。This is an example of calling Invoke-Sqlcmd to execute a simple query, similar to specifying sqlcmd with the -Q and -S options:

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

次の例では、 Invoke-Sqlcmdを呼び出し、入力ファイルを指定して、出力をファイルにパイプしています。これは、 sqlcmd-i および -o オプションを指定する場合と同様です。This is an example of calling Invoke-Sqlcmd, specifying an input file and piping the output to a file This is similar to specifying sqlcmd with the -i and -o options:

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -filePath "C:\MyFolder\TestSQLCmd.rpt"  

次の例では、Windows PowerShell 配列を使用して複数の sqlcmd スクリプト変数を Invoke-Sqlcmdに渡しています。This is an example of using a Windows PowerShell array to pass multiple sqlcmd scripting variables to Invoke-Sqlcmd. SELECT ステートメントで sqlcmd スクリプト変数を識別する "$" 文字をエスケープするために、PowerShell のバック ティック "`" エスケープ文字が使用されています。The "$" characters identifying the sqlcmd scripting variables in the SELECT statement have been escaped by using the PowerShell back-tick "`" escape character:

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

次の例では、Windows PowerShell 用の SQL ServerSQL Server プロバイダーを使用して データベース エンジンDatabase Engineのインスタンスに移動した後に、Windows PowerShell の Get-Item コマンドレットを使用してそのインスタンスの SMO サーバー オブジェクトを取得し、 Invoke-Sqlcmdに渡しています。This is an example of using the SQL ServerSQL Server provider for Windows PowerShell to navigate to an instance of the データベース エンジンDatabase Engine, and then using the Windows PowerShell Get-Item cmdlet to retrieve the SMO Server object for the instance and passing it to Invoke-Sqlcmd:

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance  
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)  

-Query パラメーターは位置で指定するパラメーターであり、名前を指定する必要はありません。The -Query parameter is positional and does not have to be named. Invoke-Sqlcmdに渡された最初の文字列に名前が付いていない場合、その文字列は -Query パラメーターとして扱われます。If the first string that is passed to Invoke-Sqlcmd: is unnamed, it is treated as the -Query parameter.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Invoke-Sqlcmd のパス コンテキストPath Context in Invoke-Sqlcmd

-Database パラメーターを使用しない場合、Invoke-Sqlcmd のデータベース コンテキストは、コマンドレットが呼び出されたときにアクティブなパスによって設定されます。If you do not use the -Database parameter, the database context for Invoke-Sqlcmd is set by the path that is active when the cmdlet is called.

[パス]Path データベース コンテキストDatabase Context
SQLSERVER: 以外のドライブで始まります。Starts with a drive other than SQLSERVER: ローカル コンピューター上の既定のインスタンスのログイン ID の既定のデータベースです。The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQLSQLSERVER:\SQL ローカル コンピューター上の既定のインスタンスのログイン ID の既定のデータベースです。The default database for the login ID in the default instance on the local computer.
SQLSERVER:\SQL\ComputerNameSQLSERVER:\SQL\ComputerName 指定したコンピューター上の既定のインスタンスのログイン ID の既定のデータベースです。The default database for the login ID in the default instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceNameSQLSERVER:\SQL\ComputerName\InstanceName 指定したコンピューター上の指定したインスタンスのログイン ID の既定のデータベースです。The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceName\DatabasesSQLSERVER:\SQL\ComputerName\InstanceName\Databases 指定したコンピューター上の指定したインスタンスのログイン ID の既定のデータベースです。The default database for the login ID in the specified instance on the specified computer.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseNameSQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName 指定したコンピューター上の指定したインスタンスの指定したデータベースです。The specified database in the specified instance on the specified computer. これは、より長いパス (たとえばデータベース内の Tables ノードや Columns ノードを指定するパス) にも適用されます。This also applies to longer paths, such as a path that specifies the Tables and Columns node within a database.

たとえば、ローカル コンピューターの既定のインスタンスの Windows アカウントの既定のデータベースが master であるとします。For example, assume that the default database for your Windows account in the default instance of the local computer is master. 次のコマンドを実行すると、master が返されます。Then, the following commands would return master:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

次のコマンドを実行すると、 AdventureWorks2012AdventureWorks2012が返されます。The following commands would return AdventureWorks2012AdventureWorks2012:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Invoke-Sqlcmd は、パス データベース コンテキストを使用するときに警告を表示します。Invoke-Sqlcmd provides a warning when it uses the path database context. -SuppressProviderContextWarning パラメーターを使用すると、警告メッセージが出力されないようにすることができます。You can use the -SuppressProviderContextWarning parameter to turn off the warning message. -IgnoreProviderContext パラメーターを使用すると、Invoke-Sqlcmd を実行するときに常にログインの既定のデータベースが使用されます。You can use the -IgnoreProviderContext parameter to tell Invoke-Sqlcmd to always use the default database for the login.

Invoke-Sqlcmd と sqlcmd ユーティリティの比較Comparing Invoke-Sqlcmd and the sqlcmd Utility

Invoke-Sqlcmd では、 sqlcmd ユーティリティを使用して実行できるスクリプトの多くを実行できます。Invoke-Sqlcmd can be used to run many of the scripts that can be run using the sqlcmd utility. ただし、 Invoke-Sqlcmd が実行される Windows PowerShell 環境は、 sqlcmd が実行されるコマンド プロンプト環境とは異なります。However, Invoke-Sqlcmd runs in a Windows PowerShell environment which is different than the command prompt environment that sqlcmd is run in. Invoke-Sqlcmd の動作は、Windows PowerShell 環境で機能するように変更されています。The behavior of Invoke-Sqlcmd has been modified to work in a Windows PowerShell environment.

すべての sqlcmd コマンドが Invoke-Sqlcmdで実装されるわけではありません。Not all of the sqlcmd commands are implemented in Invoke-Sqlcmd. 実装されないコマンドには、 :!!:connect:error:out:ed:list:listvar:reset:perftrace:serverlistがあります。Commands that are not implemented include the following: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, and :serverlist.

Invoke-Sqlcmd では sqlcmd 環境または SQLCMDDBNAME や SQLCMDWORKSTATION などのスクリプト変数が初期化されません。Invoke-Sqlcmd does not initialize the sqlcmd environment or scripting variables such as SQLCMDDBNAME or SQLCMDWORKSTATION.

Invoke-Sqlcmd では、Windows PowerShell の -Verbose 共通パラメーターを指定しない限り、PRINT ステートメントの出力などのメッセージが表示されません。Invoke-Sqlcmd does not display messages, such as the output of PRINT statements, unless you specify the Windows PowerShell -Verbose common parameter. 以下に例を示します。For example:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

sqlcmd のすべてのパラメーターが PowerShell 環境で必要となるわけではありません。Not all of the sqlcmd parameters are needed in a PowerShell environment. たとえば、Windows PowerShell ではコマンドレットからのすべての出力の書式が自動的に設定されるため、書式設定オプションを指定する sqlcmd のパラメーターは Invoke-Sqlcmdには実装されていません。For example, Windows PowerShell formats all output from cmdlets, so the sqlcmd parameters specifying formatting options are not implemented in Invoke-Sqlcmd. Invoke-Sqlcmd のパラメーターと sqlcmd のオプションの関係を次の表に示します。The follwoing table shows the relationship between the Invoke-Sqlcmd parameters and sqlcmd options:

説明Description sqlcmd オプションsqlcmd option Invoke-Sqlcmd パラメーターInvoke-Sqlcmd parameter
サーバーとインスタンスの名前Server and instance name. -S-S -ServerInstance-ServerInstance
使用する初期データベースThe initial database to use. -d-d -Database-Database
指定したクエリの実行と終了Run the specified query and exit. -Q-Q -Query-Query
SQL ServerSQL Server 認証ログイン ID Authentication login ID. -U-U -Username-Username
SQL ServerSQL Server 認証パスワード Authentication password. -P-P -Password-Password
変数の定義Variable definition. -V-v -Variable-Variable
クエリのタイムアウト間隔Query timeout interval. -t-t -QueryTimeout-QueryTimeout
エラー発生時の実行停止Stop running on an error -b-b -AbortOnError-AbortOnError
専用管理者接続Dedicated Administrator Connection. -A-A -DedicatedAdministratorConnection-DedicatedAdministratorConnection
対話型コマンド、スタートアップ スクリプト、および環境変数の無効化Disable interactive commands, startup script, and environment variables. -X-X -DisableCommands-DisableCommands
変数の代入の無効化Disable variable substitution. -X-x -DisableVariables-DisableVariables
レポートする最小重大度レベルMinimum severity level to report. -v-V -SeverityLevel-SeverityLevel
レポートする最小エラー レベルMinimum error level to report. -m-m -ErrorLevel-ErrorLevel
ログインのタイムアウト間隔Login timeout interval. -l-l -ConnectionTimeout-ConnectionTimeout
ホスト名Hostname. -H-H -HostName-HostName
パスワードの変更と終了Change password and exit. -Z-Z -NewPassword-NewPassword
クエリが含まれている入力ファイルInput file containing a query -i -i -InputFile-InputFile
文字出力の最大長Maximum length of character output. -w-w -MaxCharLength-MaxCharLength
バイナリ出力の最大長Maximum length of binary output. -w-w -MaxBinaryLength-MaxBinaryLength
SSL 暗号化を使用した接続Connect using SSL encryption. パラメーターなしNo parameter -EncryptConnection-EncryptConnection
エラーの表示Display errors パラメーターなしNo parameter -OutputSqlErrors-OutputSqlErrors
stderr へのメッセージの出力Output messages to stderr. -r-r パラメーターなしNo parameter
クライアントの地域別設定の使用Use client's regional settings -r-R パラメーターなしNo parameter
指定したクエリの実行と実行の継続Run the specified query and remain running. -Q-q パラメーターなしNo parameter
出力データに使用するコード ページCode page to use for output data. -f-f パラメーターなしNo parameter
パスワードの変更と実行の継続Change a password and remain running -Z-z パラメーターなしNo parameter
パケット サイズPacket size -a-a パラメーターなしNo parameter
列の区切りColumn separator -s-s パラメーターなしNo parameter
出力ヘッダーの制御Control output headers -H-h パラメーターなしNo parameter
制御文字の指定Specify control characters -k-k パラメーターなしNo parameter
固定長表示幅Fixed length display width -Y-Y パラメーターなしNo parameter
可変長表示幅Variable length display width -Y-y パラメーターなしNo parameter
入力のエコーEcho input -E-e パラメーターなしNo parameter
引用符で囲まれた識別子の有効化Enable quoted identifiers -i-I パラメーターなしNo parameter
末尾のスペースの削除Remove trailing spaces -w-W パラメーターなしNo parameter
インスタンスの一覧表示List instances -l-L パラメーターなしNo parameter
出力の形式を Unicode に設定Format output as Unicode -U-u パラメーターなしNo parameter
統計情報の印刷Print statistics -p-p パラメーターなしNo parameter
コマンドの終了Command end -c-c パラメーターなしNo parameter
Windows 認証を使用した接続Connect using Windows Authentication -E-E パラメーターなしNo parameter

参照See Also

データベース エンジン コマンドレットの使用 Use the Database Engine cmdlets
sqlcmd ユーティリティ sqlcmd Utility
sqlcmd ユーティリティの使用Use the sqlcmd Utility