Write-SqlTableData
SQL データベースのテーブルにデータを書き込みます。
構文
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-Path] <String[]>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Write-SqlTableData
[-DatabaseName <String>]
[-SchemaName <String>]
[-TableName <String>]
[-IgnoreProviderContext]
[-SuppressProviderContextWarning]
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[[-ServerInstance] <String[]>]
[-Credential <PSCredential>]
[-ConnectionTimeout <Int32>]
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
Write-SqlTableData
[-Force]
-InputData <PSObject>
[-Passthru]
[-Timeout <Int32>]
[-InputObject] <Table[]>
[-AccessToken <PSObject>]
[-TrustServerCertificate]
[-HostNameInCertificate <String>]
[-Encrypt <String>]
[<CommonParameters>]
説明
Write-SqlTableData コマンドレットは、SQL データベースのテーブルにデータを挿入します。 このコマンドレットは、次の出力形式の入力型を受け入れます。
- System.Data.DataSet
- System.Data.DataTable
- System.Data.DateRow オブジェクト
- オブジェクトのコレクション
DataSet を指定すると、データセット内の最初のテーブルのみがデータベースに書き込まれます。
このコマンドレットは、Windows PowerShell SQL プロバイダーで使用できます。
このコマンドレットは、サーバー、データベース、スキーマ、テーブルなどの情報を現在のパスから推論できます。
このコマンドレットは、テーブルが存在することを想定しています。 既定では、コマンドレットはそのテーブルにデータを追加します。
Force パラメーターを指定すると、データベース、テーブル スキーマ、およびテーブル自体を含む、不足しているオブジェクトがコマンドレットによって生成されます。 この使用により、データベースへのデータの迅速な転送が可能になります。 コマンドレットは、データからテーブルのスキーマを推論します。 結果が最適でない可能性があります。 たとえば、文字列は NVARCHAR(MAX) にマップされます。
例
例 1: プロセスに関する情報をテーブルに書き込む
PS C:\> (Get-Process | Select-Object -Property Id,ProcessName,StartTime,UserProcessorTime,WorkingSet,Description) |
Write-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "TaskManagerDump" -Force
この例では、システム上で実行されるプロセスに関する情報を取得し、テーブルに書き込みます。
現在のコマンドレットは、 で MyServer\MyInstance
にデータをMyDatabase.dbo.TaskManagerDump
書き込みます。
Force パラメーターを指定するため、データベース、スキーマ、およびテーブルが存在しない場合は、このコマンドレットによって作成されます。
例 2: テーブルにデータを書き込む
PS C:\> cd SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables
PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables> $Table = Write-SqlTableData -TableName "KeyValuePairs" -SchemaName "dbo" -InputData @{ cca=10; cac='Hello'; aac=1.2 } -PassThru
PS SQLSERVER:\SQL\MyServer\MyInstance\Databases\MyDatabase\Tables> Read-SqlTableData -InputObject $Table
WARNING: Using provider context. Server = MyServer\MyInstance, Database = [MyDatabase].
Key Value
--- -----
aac 1.2
cac Hello
cca 10
最初のコマンドは、SQLSERVER プロバイダー内の場所に場所を変更します。 コマンド プロンプトには、新しい場所が反映されます。 詳細については、「Get-Help about_Providers」と入力します。
最後のコマンドは、Read-SqlTableData コマンドレットを$Table
使用して変数の内容を表示します。
例 3: ファイルからテーブルにデータをインポートする
PS C:\> ,(Import-Csv -Path ".\a.csv" -Header "Id","Name","Amount") | Write-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "CSVTable" -Force
PS C:\> Read-SqlTableData -ServerInstance "MyServer\MyInstance" -DatabaseName "MyDatabase" -SchemaName "dbo" -TableName "CSVTable"
Id Name Amount
-- ---- ------
10 AAAA -1.2
11 BBBB 1.2
12 CCCC -1.0
The first command imports the contents of a file by using the Import-Csv cmdlet. The file contains the following content:
10,AAAA,-1.2
11,BBBB,1.2
12,CCCC,-1.0
この例は、ファイル プロンプトから完全に実行されます。 コンテキスト情報は使用できません。 したがって、関連するすべてのパラメーターを指定する必要があります。
行の前にある "," の使用に注意してください。これは、PowerShell がファイルの内容全体を Write-SqlTableData コマンドレットに直接渡すように強制することです。これにより、一括挿入を実行できます (これは行ごとの挿入よりもパフォーマンスが高くなります)。
例 4: あるインスタンスからデータを取得し、別のインスタンスのデータベースのテーブルにプッシュする
PS C:\> (Invoke-Sqlcmd -query "SELECT @@SERVERNAME AS 'ServerName', DB_NAME(dbid) AS 'Database',
name, CONVERT(BIGINT, size) * 8 AS 'size_in_kb', filename
FROM master..sysaltfiles" `
-ServerInstance MyServer\MyInstance -database master -OutputAs DataTables) |
Write-SqlTableData -ServerInstance MyServer\MyOtherInstance -Database ServerStats -SchemaName dbo -TableName DatabasesSizes -Force
この例では、Invoke-SqlCmd コマンドレットを使用して 1 つのインスタンスからデータベース ファイルのサイズに関する情報を取得し、結果の行をSQL Serverの別のインスタンスのデータベースに挿入します。 この例では、同じコンピューター上の SQL Server のインスタンス間でデータを移動しますが、インスタンスは 2 つのまったく異なるサーバー上にある可能性があることに注意してください。
例 5: Azure SQL データベース (または SQL Auth を使用する任意のデータベース) の既存のテーブルにデータを書き込む
Import-Module SqlServer
# Set your connection string to Azure SQL DB.
# If your server is not in Azure, just tweak the 'Data Source' field to point to your server.
# Warning: putting clear text passwords in your scripts is highly discoraged, so instead
# of using "User ID" and "Password" in the connection string, we prompt for the credentials.
$cred = Get-Credential -Message "Enter your SQL Auth credentials"
$cred.Password.MakeReadOnly()
# Get access to the SMO Server object.
$srv = Get-SqlInstance -ServerInstance "<your_server_name>.database.windows.net" -Credential $cred
# Get access to table 'MyTable1' on database 'MyDB'.
# Note: both objects are assumed to exists already.
$db = $srv.Databases["MyDB"]
$table = $db.Tables["MyTable1"]
# Write the first 4 integers into the table.
# Note: 'MyTable1' has a column 'Col1' of type 'int'
Write-SqlTableData -InputData (1..4) -InputObject $table
# Now, we read the data back to verify all went ok.
Read-SqlTableData -InputObject $table
# Output:
#
# Col1
# ----
# 1
# 2
# 3
# 4
この例では、SQL 認証で Write-SqlTableData コマンドレットを使用する方法を示します。
ほとんどのコードは、パラメーターを介して-InputOject
コマンドレットに渡される必要なオブジェクト (SMO Table
ターゲット テーブルを表すオブジェクト) を作成するために必要な ADO.Net と SMO 定型句です。
パラメーター
-AccessToken
ユーザー/パスワードまたは Windows 認証の代わりに、SQL Serverに対する認証に使用されるアクセス トークン。
これは、たとえば、 または を使用して にSQL Azure DB
接続したりSQL Azure Managed Instance
、 を使用したりManaged Identity
するために使用Service Principal
できます。
使用するパラメーターには、 を実行Get-AzAccessToken -ResourceUrl https://database.windows.net
して返されるトークンまたはオブジェクトをPSAccessToken
表す文字列を指定できます。
このパラメーターは、モジュールの v22 の新機能です。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ConnectionTimeout
タイムアウトエラーが発生するまでのサーバー接続を待機する秒数を指定します。 タイムアウト値には、0 ~ 65,534 の範囲の整数値を指定する必要があります。 0 を指定した場合、接続の試行はタイムアウトしません。
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
SQL Serverへの接続の PSCredential オブジェクトを指定します。 資格情報オブジェクトを取得するには、Get-Credential コマンドレットを使用します。 詳細については、「Get-Help Get-Credential」と入力してください。
Type: | PSCredential |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-DatabaseName
テーブルを含むデータベースの名前を指定します。
コマンドレットでは、値の引用符がサポートされています。 特殊文字を引用符で囲んだりエスケープしたりする必要はありません。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encrypt
SQL Serverに接続するときに使用する暗号化の種類。
この値は、 Encrypt
Microsoft.Data.SqlClient ドライバーの SqlConnection オブジェクトの プロパティ SqlConnectionEncryptOption
にマップされます。
モジュールの v22 では、既定値は Optional
(v21 との互換性のために) です。 モジュールの v23 以降では、既定値は "必須" になります。これにより、既存のスクリプトに破壊的変更が発生する可能性があります。
このパラメーターは、モジュールの v22 の新機能です。
Type: | String |
Accepted values: | Mandatory, Optional, Strict |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Force
このコマンドレットによって、不足しているSQL Serverオブジェクトが作成されることを示します。 これには、データベース、スキーマ、およびテーブルが含まれます。 これらのオブジェクトを作成するには、適切な資格情報が必要です。
不足しているオブジェクトに対してこのパラメーターを指定しない場合、コマンドレットはエラーを返します。
Type: | SwitchParameter |
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 の新機能です。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IgnoreProviderContext
このコマンドレットは、現在のコンテキストを使用して ServerInstance、DatabaseName、SchemaName、および TableName パラメーターの値をオーバーライドしないことを示します。 このパラメーターを指定しない場合、コマンドレットは、コマンドレットを実行するコンテキストを優先して、可能であれば、これらのパラメーターの値を無視します。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputData
データベースに書き込むデータを指定します。
一般的な入力データは System.Data.DataTable ですが、 System.Data.DataSet オブジェクトまたは System.Data.DateRow* オブジェクトを指定できます。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InputObject
このコマンドレットが書き込むテーブルを表すSQL Server管理オブジェクト (SMO) オブジェクトの配列を指定します。
Type: | Table[] |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Passthru
このコマンドレットから SMO が返されることを示します 。Table オブジェクト。 このオブジェクトは、追加されたデータを含むテーブルを表します。 書き込み操作後にテーブルを操作できます。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
このコマンドレットがデータを書き込むテーブルの SQL プロバイダーのコンテキストで、完全なパスを指定します。
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SchemaName
テーブルのスキーマの名前を指定します。
データベースまたはデータベースの子項目のコンテキストでこのコマンドレットを実行すると、このパラメーター値は無視されます。 コマンドレットの IgnoreProviderContext パラメーターを指定して、 SchemaName パラメーターの値を使用します。
コマンドレットでは、値の引用符がサポートされています。 特殊文字を引用符で囲んだりエスケープしたりする必要はありません。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ServerInstance
SQL Serverのインスタンスの名前を指定します。
既定のインスタンスには、コンピューター名を指定します。
名前付きインスタンスの場合は、 という形式 ComputerName\InstanceName
を使用します。
データベースまたはデータベースの子項目のコンテキストでこのコマンドレットを実行すると、このパラメーター値は無視されます。 ServerInstance パラメーターの値を使用するには、コマンドレットの IgnoreProviderContext パラメーターを指定します。
Type: | String[] |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SuppressProviderContextWarning
このコマンドレットがプロバイダー コンテキストを使用することを示す警告メッセージを抑制することを示します。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TableName
このコマンドレットが読み取るテーブルの名前を指定します。
データベースまたはデータベースの子項目のコンテキストでこのコマンドレットを実行すると、このパラメーター値は無視されます。 コマンドレットに IgnoreProviderContext パラメーターを指定して、 TableName パラメーターの値を使用します。
コマンドレットでは、値の引用符がサポートされています。 特殊文字を引用符で囲んだりエスケープしたりする必要はありません。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Timeout
書き込み操作のタイムアウト値を秒単位で指定します。 値を指定しない場合、コマンドレットは既定値 (通常は 30s) を使用します。 タイムアウトを回避するには、0 を渡します。 タイムアウトは、0 ~ 65535 の整数値である必要があります。
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TrustServerCertificate
信頼を検証するために証明書チェーンの歩き方をバイパスしながらチャネルを暗号化するかどうかを示します。
モジュールの v22 では、既定値は $true
(v21 との互換性のために) です。 モジュールの v23 以降では、既定値は "$false" になります。これにより、既存のスクリプトに破壊的変更が発生する可能性があります。
このパラメーターは、モジュールの v22 の新機能です。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
System.Management.Automation.PSObject
System.String[]
Microsoft.SqlServer.Management.Smo.Table[]