Invoke-Sqlcmd

SQL Server SQLCMD ユーティリティでサポートされているステートメントを含むスクリプトを実行します。

構文

Invoke-Sqlcmd
      [-ServerInstance <PSObject>]
      [-Database <String>]
      [-Encrypt <String>]
      [-EncryptConnection]
      [-Username <String>]
      [-AccessToken <String>]
      [-Password <String>]
      [-Credential <PSCredential>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ConnectionTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DedicatedAdministratorConnection]
      [-DisableVariables]
      [-DisableCommands]
      [-HostName <String>]
      [-ApplicationName <String>]
      [-ApplicationIntent <ApplicationIntent>]
      [-MultiSubnetFailover]
      [-FailoverPartner <String>]
      [-HostNameInCertificate <String>]
      [-TrustServerCertificate]
      [-NewPassword <String>]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-SuppressProviderContextWarning]
      [-IgnoreProviderContext]
      [-OutputAs <OutputType>]
      [-StatisticsVariable <String>]
      [<CommonParameters>]
Invoke-Sqlcmd
      [-AccessToken <String>]
      [[-Query] <String>]
      [-QueryTimeout <Int32>]
      [-ErrorLevel <Int32>]
      [-SeverityLevel <Int32>]
      [-MaxCharLength <Int32>]
      [-MaxBinaryLength <Int32>]
      [-AbortOnError]
      [-DisableVariables]
      [-DisableCommands]
      [-Variable <PSObject>]
      [-InputFile <String>]
      [-OutputSqlErrors <Boolean>]
      [-IncludeSqlUserErrors]
      [-OutputAs <OutputType>]
      -ConnectionString <String>
      [-KeyVaultAccessToken <String>]
      [-ManagedHsmAccessToken <String>]
      [-StatisticsVariable <String>]
      [<CommonParameters>]

説明

Invoke-Sqlcmd コマンドレットは、SQL Server SQLCMD ユーティリティでサポートされている言語とコマンドを含むスクリプトを実行します。

サポートされているコマンドは、Transact-SQL ステートメントと、データベース エンジンでサポートされている XQuery 構文のサブセットです。

このコマンドレットでは、GO や QUIT など、SQLCMD でネイティブにサポートされているコマンドの多くも受け入れられます。

このコマンドレットは、SQLCMDUSER などの SQLCMD スクリプト変数も受け入れます。 既定では、このコマンドレットは SQLCMD スクリプト変数を設定しません。

このコマンドレットは、主に対話型スクリプト編集に関連するコマンドの使用をサポートしていません。

サポートされないコマンドには、:!!、:connect、:error、:out、:ed、:list、:listvar、:reset、:perftrace、および :serverlist があります。

このコマンドレットを実行すると、スクリプトから返される最初の結果セットが書式設定されたテーブルとして表示されます。

後続の結果セットに最初の結果セットとは異なる列リストが含まれている場合、それらの結果セットは表示されません。

最初のセットの後の後続の結果セットに同じ列リストがある場合、その行は、最初の結果セットによって返された行を含む書式設定されたテーブルに追加されます。

Verbose パラメーター SQL Server指定すると、SQL PRINT ステートメントの結果などのメッセージ出力を表示できます。

例 1: 名前付きインスタンスに接続し、スクリプトを実行する

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

TimeOfQuery
-----------
9/21/2017 2:48:24 PM

このコマンドは、コンピューター上のSQL Database エンジンの名前付きインスタンスに接続し、基本的な Transact-SQL スクリプトを実行します。

例 2: スクリプト ファイルでコマンドを呼び出し、出力をテキスト ファイルに保存する

Invoke-Sqlcmd -InputFile "C:\ScriptFolder\TestSqlCmd.sql" | Out-File -FilePath "C:\ScriptFolder\TestSqlCmd.rpt"
Output sent to TestSqlCmd.rpt.

このコマンドは、Transact-SQL ステートメントと SQLCMD コマンドを含むファイルを読み取り、ファイルを実行して、出力を別のファイルに書き込みます。

出力ファイルには独自の情報が含まれている可能性があるため、適切な NTFS アクセス許可で出力ファイルをセキュリティで保護する必要があります。

例 3: スクリプトを呼び出し、文字列から変数値を渡す

$StringArray = "MYVAR1='String1'", "MYVAR2='String2'"
Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2" -Variable $StringArray

Var1     Var2
----     ----
String1  String2

このコマンドは、Variable パラメーターへの入力として文字列の配列を使用します。

配列は、複数の SQLCMD 変数を定義します。

SQLCMD 変数を識別する SELECT ステートメントの $ 記号は、バックティック (') 文字を使用してエスケープされます。

例 4: スクリプトを呼び出し、SQL データベース エンジンから変数を渡す

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd -Query "SELECT SERVERPROPERTY('MachineName') AS ComputerName" -ServerInstance (Get-Item .)

ComputerName
------------
MyComputer

このコマンドでは、Set-Location を使用して、SQL Database エンジンのインスタンスの SQL ServerWindows PowerShell プロバイダー パスに移動します。

次に、Get-Item を呼び出して、Invoke-Sqlcmd の ServerInstance パラメーターとして使用する SQL 管理オブジェクト サーバー オブジェクトを取得します。

例 5: クエリを実行し、詳細な出力を表示する

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance"
Invoke-SqlCmd -Query "PRINT N'abc'" -Verbose
VERBOSE: abc

このコマンドは、Windows PowerShellVerbose パラメーターを使用して、SQL PRINT コマンドのメッセージ出力を返します。

例 6: 位置指定文字列を入力として使用してコマンドを呼び出す

Set-Location "SQLSERVER:\SQL\MyComputer\MainInstance\Databases\MyDatabase"
PS SQLSERVER:\SQL\MyComputer\MainInstance> Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName"
WARNING: Using provider context. Server = MyComputer\MainInstance, Database = MyDatabase.

DatabaseName
------------
MyDatabase

このコマンドでは、位置指定文字列を使用して、Query パラメーターへの入力を指定します。

また、Invoke-Sqlcmd が現在のパスを使用してデータベース コンテキストを MyDatabase に設定する方法も示します。

例 7: DataSet オブジェクトにデータをキャプチャする

$DS = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  ID, Item FROM MyDB.dbo.MyTable" -As DataSet
$DS.Tables[0].Rows | %{ echo "{ $($_['ID']), $($_['Item']) }" }

{ 10, AAA }
{ 20, BBB }
{ 30, CCC }

このコマンドでは、As DataSet パラメーターを使用してデータを .Net System.Data.DataSet オブジェクトにキャプチャし、結果を変数 '$DS' に格納します。 オブジェクトは、さらに処理するために使用できます。

例 8: 特定の列セットを取得する

$Tables = Invoke-Sqlcmd -ServerInstance "MyComputer" -Query "SELECT  Item, id FROM MyDatabase.dbo.MyTable; SELECT GETDATE() AS T" -As DataTables
$Tables[0].Rows | %{ echo $_.ID }
$Tables[1].Rows | %{ echo $_.T.DayOfWeek }

10
20
30

Monday

最初のコマンドでは、As DataTables パラメーターを使用して、.Net System.Data.DataTable オブジェクトのコレクションにデータをキャプチャします。 コマンドは、異なる列セットを持つ 2 つのテーブルを取得します。

各テーブルは、独自のスキーマに基づいて個別に処理できます。

例 9: 接続を完全に制御する

Invoke-Sqlcmd -Query "SELECT COUNT(*) AS Count FROM MyTable" -ConnectionString "Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly"
Count
-----
127432

このコマンドは、-ConnectionString パラメーターを使用して、コマンド ラインで渡されたパラメーターに基づいて接続文字列をビルドする Invoke-Sqlcmd ではなく、このコマンドレットが確立する接続を完全に制御します。

これは、使用する可能性のあるあまり一般的でないプロパティに役立ちます。

例 10: ストアド プロシージャを実行し、SQL エラーをキャプチャする

$script_sp_with_errors = @'
CREATE PROCEDURE [dbo].[TestProcedure3]
AS 
BEGIN 
  CREATE TABLE [dbo].[TestTable] (col INT NOT NULL);
  INSERT INTO [dbo].[TestTable] VALUES (NULL); -- will cause an error
END
GO
'@

# Create a test database
Invoke-SqlCmd -ServerInstance MyServer -Query 'CREATE DATABASE TestDB'
# ... adds a stored procedure that has errors in it...
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query $script_sp_with_errors
# ... executes the SP and collected the errors
Invoke-SqlCmd -ServerInstance MyServer -Database 'TestDB' -Query 'EXEC TestProcedure3' -OutputSqlErrors $true

Here's the output:
Invoke-SqlCmd : Cannot insert the value NULL into column 'col', table 'TestDB.dbo.TestTable'; column does not allow nulls. INSERT fails.
The statement has been terminated.
 Msg 515, Level 16, State 2, Procedure TestProcedure3, Line 5.
At line:1 char:1
...

このコマンドでは、 -OutputSqlErrors パラメーターを 使用してエラーをユーザーに報告します。 この場合のエラー メッセージは、SP 名やエラーが発生した行番号などの追加情報を提供します。

例 11: アクセス トークンを使用してAzure SQL データベース (またはManaged Instance) に接続する

Import-Module SQLServer
Import-Module Az.Accounts -MinimumVersion 2.2.0

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

### Obtain the Access Token: this will bring up the login dialog
Connect-AzAccount
$access_token = (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

例 12: サービス プリンシパルを使用して Azure SQL データベース (またはManaged Instance) に接続する

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that Service Principal and has granted it access to the database (in this example at least
#       the SELECT permission).

$clientid = "enter application id that corresponds to the Service Principal" # Do not confuse with its display name
$tenantid = "enter the tenant ID of the Service Principal"
$secret = "enter the secret associated with the Service Principal"

$request = Invoke-RestMethod -Method POST `
           -Uri "https://login.microsoftonline.com/$tenantid/oauth2/token"`
           -Body @{ resource="https://database.windows.net/"; grant_type="client_credentials"; client_id=$clientid; client_secret=$secret }`
           -ContentType "application/x-www-form-urlencoded"
$access_token = $request.access_token

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

例 13: マネージド ID を使用して Azure SQL Database (またはManaged Instance) に接続する

Import-Module SQLServer

# Note: the sample assumes that you or your DBA configured the server to accept connections using
#       that VM Identity you are running on and has granted it access to the database (in this 
#       example at least the SELECT permission).

## Obtain access token from the machine
if (Get-Command -All az -ErrorAction SilentlyContinue -CommandType Application) {
  # Obtain the Access Token from the Azure provider for database resources (using az az cli)
  az login
  $access_token = az account get-access-token --resource https://database.windows.net/ --query accessToken -o tsv
} else {
  # az cli not around: fall back and assume this is a VM in Azure
  $response = Invoke-WebRequest `
    -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net'`
    -Method GET`
    -Headers @{Metadata="true"}
  $access_token = ($response.Content | ConvertFrom-Json).access_token
}

# Now that we have the token, we use it to connect to the database 'mydb' on server 'myserver'
Invoke-Sqlcmd -ServerInstance myserver.database.windows.net -Database mydb -AccessToken $access_token`
              -query 'select * from Table1'

この例は、上記の例に似ています。 AccessToken パラメーターの柔軟性のみが示されます。

例 14: -ApplicationIntent を使用して Read-Only ルーティング用に構成された可用性グループに接続する

# In the following example:
# - MT_2009250511 is a listener for an AG configured for Read-Only Routing (port 5555)
# - AGDB_2_1 is the DB in the AG
# - VLM00226138 is the primary replica configured to only allow ReadWrite connections 
# - VLM00226137 is the secondary replica
# 
Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox1" -ApplicationName "ReadWrite" -ApplicationIntent ReadWrite `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"

Invoke-Sqlcmd -ServerInstance "MT_2009250511,5555" -Database AGDB_2_1 `
     -HostName "PowershellBox2" -ApplicationName "ReadOnly" -ApplicationIntent ReadOnly `
     -Query "select HOST_NAME() AS HostName, APP_NAME() AS ApplicationIntent, @@SERVERNAME AS ServerName"  

# When you run the 2 cmdlets above, the output is going to be something like this:  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox1 ReadWrite         VLM00226138  
#  
# HostName       ApplicationIntent ServerName  
# --------       ----------------- ----------  
# PowershellBox2 ReadOnly          VLM00226137

これは、パラメーターの値に応じて、接続が AG 内の -ApplicationIntent 別のサーバーにルーティングされることを示しています。 なお、 パラメーターと -HostName パラメーターを-ApplicationName使用して 2 つの結果を視覚的に区別することを確認します。これは、ここで示す -ApplicationIntent の例を超えて、接続とその意図をトレースするために使用できる一般的な手法です。

例 15: -StatisticsVariable パラメーターを使用して接続統計をキャプチャする

Import-Module SQLServer
Invoke-Sqlcmd -ServerInstance localhost -StatisticsVariable stats `
              -Query 'CREATE TABLE #Table (ID int); INSERT INTO #Table VALUES(1), (2); INSERT INTO #Table VALUES(3); SELECT * FROM #Table'

Write-Host "Number of rows affected......: $($stats.IduRows)"
Write-Host "Number of insert statements..: $($stats.IduCount)"
Write-Host "Number of select statements..: $($stats.SelectCount)"
Write-Host "Total execution time.........: $($stats.ExecutionTime)ms"

# When you run the code fragment above, is going to be something like this:  
#
# Number of rows affected......: 3
# Number of insert statements..: 2
# Number of select statements..: 1
# Total execution time.........: 5ms

この例では、 パラメーターを -StatisticsVariable 使用して、一時テーブルを作成し、いくつかの値を挿入し、最後に select を発行して挿入されたすべての行を取得する T-SQL の実行時に、接続、実行されたステートメント、および実行時間に関する情報をキャプチャする方法を示します。

注: 同じクエリが複数のサーバーに対して実行される場合 (たとえば、コマンドレットを使用してサーバー名をパイプするなど) StatisticsVariable は、接続ごとに 1 つずつ統計の配列をキャプチャします。 結果は、 などを ($stats.IduRows | Measure-Object -Sum).Sum使用して集計できます。

使用可能な統計情報の詳細については、「SQL Serverのプロバイダー統計」を参照してください。

例 16: Always Encryptedを使用して暗号化された列から取得されたデータを復号化するクエリを実行します。 列マスター キーが Azure Key Vault のキー コンテナーに格納されているとします。

# Connect to Azure account.
Import-Module Az.Accounts -MinimumVersion 2.2.0
Connect-AzAccount

# Obtain an access token for key vaults. 
$keyVaultAccessToken = (Get-AzAccessToken -ResourceUrl https://vault.azure.net).Token

# Pass the token to the cmdlet, so that it can use it to authenticate to Azure when decrypting data protected with Always Encrypted.
$connString = 'Data Source=MYSERVER;Initial Catalog=MyDatabase;Integrated Security=True;ApplicationIntent=ReadOnly;Column Encryption Setting=Enabled'
Invoke-Sqlcmd -Query 'SELECT COUNT(*) AS Count FROM MyTable' -ConnectionString $connString -KeyVaultAccessToken $keyVaultAccessToken

パラメーター

-AbortOnError

このコマンドレットがSQL Server コマンドを停止し、このコマンドレットでエラーが発生した場合にエラー レベルを Windows PowerShell ERRORLEVEL 変数に返します。

返されるエラー レベルは、エラーの重大度が 10 より大きい場合は 1、エラーの重大度が 10 以下の場合は 0 です。

ErrorLevel パラメーターも指定した場合、エラー メッセージの重大度が ErrorLevel に指定された値以上の場合にのみ、このコマンドレットは 1 を返します。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-AccessToken

ユーザー/パスワードまたは Windows 認証の代わりに、SQL Serverに対する認証に使用されるアクセス トークン。

これは、たとえば、 または Managed Identity または にSQL Azure DBSQL Azure Managed Instance接続して使用するために使用Service Principalできます (このページの下部にある参照を参照してください)。

一般的なシナリオでは、このパラメーターは 次のようなもの (Get-AzAccessToken -ResourceUrl https://database.windows.net).Token で取得されます (Az.Account モジュールが必要です)

このパラメーターを使用する場合は、 UserNamePassword、または Credential を 指定しないでください。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationIntent

SQL Server可用性グループ内のデータベースに接続するときのアプリケーション ワークロードの種類。

使用できる値は、ReadOnly と ReadWrite です。

Type:ApplicationIntent
Accepted values:ReadWrite, ReadOnly
Position:Named
Default value:ReadWrite
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ApplicationName

接続に関連付けられているアプリケーションの名前。

Type:String
Position:Named
Default value:.NET SqlClient Data Provider
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionString

サーバーに接続する接続文字列を指定します。

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-ConnectionTimeout

データベース エンジンのインスタンスに正常に接続できない場合に、このコマンドレットがタイムアウトしたときの秒数を指定します。 タイムアウト値は、0 ~ 65534 の整数値である必要があります。 0 を指定した場合、接続の試行はタイムアウトしません。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

ユーザー名フィールドとパスワード フィールドが SQL インスタンスへの接続に使用される PSCredential オブジェクト。

Type:PSCredential
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Database

データベースの名前を指定します。 このコマンドレットは、ServerInstance パラメーターで指定されたインスタンス内のこのデータベースに接続します。

Database パラメーターが指定されていない場合、使用されるデータベースは、現在のパスで SQLSERVER:\SQL フォルダーとデータベース名の両方を指定するかどうかによって異なります。 パスに SQL フォルダーとデータベース名の両方が指定されている場合、このコマンドレットはパスで指定されたデータベースに接続します。 パスが SQL フォルダーに基づいていない場合、またはパスにデータベース名が含まれていない場合、このコマンドレットは現在のログイン ID の既定のデータベースに接続します。 IgnoreProviderContext パラメーター スイッチを指定した場合、このコマンドレットは現在のパスで指定されたデータベースを考慮せず、現在のログイン ID の既定値として定義されているデータベースに接続します。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DedicatedAdministratorConnection

このコマンドレットが専用管理者接続 (DAC) を使用してデータベース エンジンのインスタンスに接続することを示します。

DAC は、新しい標準接続を受け入れないインスタンスのトラブルシューティングなどのアクションに対してシステム管理者が使用します。

インスタンスは、DAC をサポートするよう構成する必要があります

DAC が有効になっていない場合、このコマンドレットはエラーを報告し、実行されません。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableCommands

バッチ ファイルで実行するとセキュリティが損なわれる可能性がある sqlcmd 機能の一部を、このコマンドレットによってオフにすることを示します。

Windows PowerShell変数が Invoke-Sqlcmd スクリプトに渡されないようにします。

SQLCMDINI スクリプト変数で指定されたスタートアップ スクリプトは実行されません。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableVariables

このコマンドレットが sqlcmd スクリプト変数を無視することを示します。 これは、$(variable_name) などの変数と同じ形式の文字列を含む INSERT ステートメントが、スクリプトに多数含まれている場合に便利です。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encrypt

SQL Serverに接続するときに使用する暗号化の種類。

この値は、 Encrypt Microsoft.Data.SqlClient ドライバーの SqlConnection オブジェクトの プロパティ SqlConnectionEncryptOption にマップされます。

指定しない場合、既定値は Mandatory です。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンク」を参照してくださいStrict Connection Encryption

Type:String
Accepted values:Mandatory, Optional, Strict
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-EncryptConnection

このコマンドレットが、ServerInstance パラメーターで指定されたデータベース エンジンのインスタンスへの接続に Secure Sockets Layer (SSL/TLS) 暗号化を使用することを示します。

モジュールの v22 以降では、このパラメーターは非推奨です。 Connectionsは既定で暗号化されます。 代わりに、新しい -Encrypt パラメーターを使用することを検討してください。 詳細については、「関連リンク」を参照してくださいStrict Connection Encryption

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ErrorLevel

このコマンドレットは、重大度レベルが指定された値以上のエラー メッセージのみを表示するように指定します。 このパラメーターが指定されていない場合、または 0 に設定されている場合は、すべてのエラー メッセージが表示されます。 データベース エンジン エラーの重大度は 1 ~ 24 です。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FailoverPartner

プライマリ サーバーがダウンしている場合に接続するパートナー サーバーの名前またはアドレス。

Type:String
Position:Named
Default value:""
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostName

ワークステーション名を指定します。 ワークステーション名は、sp_who システム ストアド プロシージャによって、sys.processes カタログ ビューの hostname 列で報告されます。 このパラメーターを指定しない場合、既定値は、Invoke-Sqlcmd を実行するコンピューターの名前です。 このパラメーターを使用して、さまざまな Invoke-Sqlcmd セッションを識別できます。

Type:String
Aliases:WorkstationID
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-HostNameInCertificate

SQL Server TLS/SSL 証明書の検証に使われるホスト名。 SQL Server インスタンスが Force Encryption に対して有効になっており、hostname/shortname を使用してインスタンスに接続する場合は、このパラメーターを渡す必要があります。 このパラメーターを省略した場合、強制暗号化が有効になっているSQL Server インスタンスに接続するには、完全修飾ドメイン名 (FQDN) を -ServerInstance に渡す必要があります。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンク」を参照してくださいStrict Connection Encryption

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IgnoreProviderContext

このコマンドレットは、現在の SQLSERVER:\SQL パスによって確立されたデータベース コンテキストを無視することを示します。 Database パラメーターが指定されていない場合、このコマンドレットは現在のログイン ID または Windows アカウントに既定のデータベースを使用します。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeSqlUserErrors

このコマンドレットは、既定では無視される SQL ユーザー スクリプト エラーを返します。 このパラメーターを指定した場合、このコマンドレットは sqlcmd ユーティリティの既定の動作と一致します。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputFile

このコマンドレットへのクエリ入力として使用するファイルを指定します。 このファイルには、Transact-SQL ステートメント、XQuery ステートメント、sqlcmd コマンド、およびスクリプト変数を含めることができます。 ファイルへの完全なパスを指定します。 ファイル パスまたはファイル名にスペースを含めることはできません。 ファイルは UTF-8 を使用してエンコードされる必要があります。

信頼できるソースからのみスクリプトを実行する必要があります。 すべての入力スクリプトが適切な NTFS 権限で保護されていることを確認してください。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-KeyVaultAccessToken

Azure Key Vaultのキー コンテナーのアクセス トークンを指定します。 クエリ対象の列が、Azure Key Vault のキー コンテナーに格納されている列マスター キーを使用してAlways Encryptedで保護されている場合は、このパラメーターを使用します。 または、このコマンドレットを呼び出す前に、Add-SqlAzureAuthenticationContext を使用して Azure に対して認証を行うことができます。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ManagedHsmAccessToken

Azure Key Vaultのマネージド HSM のアクセス トークンを指定します。 Azure Key Vault のマネージド HSM に格納されている列マスター キーを使用して、クエリ対象の列がAlways Encryptedで保護されている場合は、このパラメーターを使用します。 または、このコマンドレットを呼び出す前に、Add-SqlAzureAuthenticationContext を使用して Azure に対して認証を行うことができます。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxBinaryLength

binary や varbinary など、バイナリ文字列型の列に返される最大バイト数を指定します。 既定値は 1,024 バイトです。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MaxCharLength

char、nchar、varchar、nvarchar など、文字または Unicode のデータ型の列に返される最大文字数を指定します。 既定値は 4,000 文字です。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-MultiSubnetFailover

アプリケーションが異なるサブネット上の AlwaysOn 可用性グループ (AG) に接続している場合、このパラメーターを渡すと、(現在) アクティブなサーバーの検出と接続が高速化されます。

注: .NET Framework 4.6.1 以降のバージョンでは、-MultiSubnetFailover を渡す必要はありません。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NewPassword

SQL Server 認証ログイン ID の新しいパスワードを指定します。 このコマンドレットはパスワードを変更してから終了します。 ログインの現在のパスワードを指定する Password を使用して、Username パラメーターと Password パラメーターも指定する必要があります。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputAs

このコマンドレットが取得する結果の種類を指定します。

このパラメーターの値を指定しない場合、コマンドレットは値を DataRows に設定します。

Type:OutputType
Aliases:As
Accepted values:DataSet, DataTables, DataRows
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputSqlErrors

このコマンドレットが Invoke-Sqlcmd 出力にエラー メッセージを表示することを示します。

Type:Boolean
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Password

Username パラメーターで指定したSQL Server認証ログイン ID のパスワードを指定します。 パスワードでは大文字と小文字が区別されます。 可能な場合は、Windows 認証を使用します。 空白のパスワードは使用せず、できるだけ強力なパスワードを使用してください。

Password パラメーターの後にパスワードを指定すると、モニターを表示できるすべてのユーザーにパスワードが表示されます。

.ps1 スクリプトでパスワードの後にパスワードをコーディングすると、スクリプト ファイルを読んでいるすべてのユーザーにパスワードが表示されます。

他のユーザーがファイルを読み取ることをできないようにするには、適切な NTDB 権限をファイルに割り当てます。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Query

このコマンドレットが実行する 1 つ以上のクエリを指定します。 クエリには、Transact-SQL ステートメント、XQuery ステートメント、または sqlcmd コマンドを指定できます。 複数のクエリは、セミコロン (;) で区切って指定できます。 sqlcmd の GO 区切り記号は指定しないでください。 文字列に含まれる二重引用符はエスケープされます。 "MyTable" のように引用符で囲まれた識別子ではなく、[MyTable] のように角かっこで囲まれた識別子を使用することを検討してください。

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-QueryTimeout

クエリがタイムアウトするまでの秒数を指定します。タイムアウト値が指定されていない場合、クエリはタイムアウトになりません。タイムアウトは、1 ~ 65535 の整数値である必要があります。

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ServerInstance

データベース エンジンのインスタンスの名前を指定する文字列またはSQL Server管理オブジェクト (SMO) オブジェクトを指定します。 既定のインスタンスの場合は、コンピューター名 MyComputer のみを指定します。 名前付きインスタンスの場合は、ComputerName\InstanceName という形式を使用します。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SeverityLevel

このコマンドレットが ERRORLEVEL Windows PowerShell 変数に返すエラー メッセージの重大度レベルの下限を指定します。

このコマンドレットは、重大度が SeverityLevel パラメーターで指定されている以上の場合に、実行するクエリによって生成されたエラー メッセージから最も高い重大度レベルを返します。

SeverityLevel が指定されていないか、0 に設定されている場合、このコマンドレットは 0 を ERRORLEVEL に返します。

データベース エンジンのエラー メッセージの重大度は 1 ~ 24 です。

このコマンドレットは、重大度が 10 の情報メッセージの重大度を報告しません

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-StatisticsVariable

コマンドレットの実行時にSQL Serverランタイム統計を割り当てる PowerShell 変数の名前を指定します。

このパラメーターの一般的な使用方法は、 (プロバイダーがコマンドレットの処理に費やした累積時間 (ミリ秒単位))、または IduRows (INSERT、DELETE、および UPDATE ステートメントの影響を受ける行の合計数) をキャプチャExecutionTimeすることです。

詳細については、「SQL Serverのプロバイダー統計」を参照してください。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SuppressProviderContextWarning

このコマンドレットが、現在の SQLSERVER:\SQL パス設定のデータベース コンテキストでコマンドレットのデータベース コンテキストを確立するために使用したという警告を抑制することを示します。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TrustServerCertificate

信頼を検証するために証明書チェーンのウォークをバイパスしながらチャネルを暗号化するかどうかを示します。

このパラメーターは、モジュールの v22 の新機能です。 詳細については、「関連リンク」を参照してくださいStrict Connection Encryption

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Username

データベース エンジンのインスタンスへの SQL Server 認証接続を確立するためのログイン ID を指定します。

パスワードは、Password パラメーターを使用して指定する必要があります。

Username と Password が指定されていない場合、このコマンドレットは、Windows PowerShell セッションを実行している Windows アカウントを使用して Windows 認証接続を試行します。 可能な場合は、Windows 認証を使用します。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Variable

sqlcmd スクリプトで使用する sqlcmd スクリプト変数のセットを指定し、変数の値を設定します。

複数の変数とその値を指定するには、Windows PowerShell配列を使用します。または、キーが変数名と変数値を表す を使用Hashtableします。

配列を使用する場合、パラメーター値はトリミングされます。 この動作は、v21 との下位互換性のためにモジュールの v22 に保持されていました。 モジュールの将来のメジャー バージョンで変更される可能性があるこの動作に依存しないことをお勧めします。

Hashtable のパラメーターは、モジュールの v22 以降でのみ使用できます。

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

入力

System.Management.Automation.PSObject

出力

System.Object