0

SQL でストアド プロシージャを実行する PowerShell スクリプトがあります。これは、大きな単一の XML 結果を返します。この XML 結果をファイルに保存する必要があります。

残念ながら、PowerShell が見栄えを良くしようとすると、出力が損なわれます。

 $xmldataset.tables[0] | ft -wrap -hidetableheaders | out-file C:\xml_result.xml

これで完全な結果が得られますが、画面に表示されているかのように結果がラップされます。これにより、ほとんどの XML パーサーが壊れます。

$xmldataset.tables[0] | ft -hidetableheaders | out-file C:\xml_result.xml

これにより、結果が任意に 2 行に分割され、各行が切り捨てられます。

-wrap を使用しない限り、SQL から返されるのは 1 行だけですが、結果が 2 行に表示されます。

ここに完全なコードがあります

$SqlCmd.CommandText = "exec dbo.sp_getXML"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SqlServer; Database = $SqlCatalog; Integrated Security = True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$xmlDataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($xmlDataSet)

SQL からの出力をファイルに保存し、できれば SQL の結果によって作成された改行も保存するにはどうすればよいですか。

4

2 に答える 2

0

これが私にとって最もうまくいったものです。

$xml = ""
for ($i=0; $i -lt $xmldataset.tables[0].rows.count; $i++){
    $xml = $xml+$xmldataset.tables[0].rows[$i][0].ToString()
}
$xml | out-file -filepath C:\Users\mvrydaghs\Documents\test_copy\xml_result.xml

結果をランダムに複数の行に分割しているため、ループが必要でした。ループ内でファイルに直接書き込むと、改行が不要で要求されないままになるため、連結に追加の変数を使用してから、それをファイルに書き込む必要がありました。

于 2013-02-25T18:30:30.573 に答える
0

次のように書式設定を削除できます。

$xmldataset.tables[0] | ft -wrap -hidetableheaders | out-string | out-file C:\xml_result.xml
于 2013-02-25T15:03:37.920 に答える