3
私はいくつかのSQLタスクを自動化するPowershellスクリプトを学んでいます。私はデータセットを埋めるためにDataAdapterを使いました。私はコンソールから14の列が選択されているという正しい番号を得ました。しかし、私はループを使用して、データセットからテーブルの特定の列を印刷することに固執しています。データセット内のテーブルの特定の列を取得する方法は?
更新:TheMadTechnicianは私の問題を修正し
1) - SQLクエリのミス。
2)ここで修正したコードを更新しました。また、Method3を追加して、他の人がより整形された表を印刷できるようにしました。
マイコード:
# $ConnectionString is the server and my account info.
$SqlQuery = $("SELECT * FROM MyTable")
$Connection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SqlQuery, $Connection)
$Connection.Open()
$DataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$DataAdapter.SelectCommand = $SqlCommand
$Dataset = New-Object System.Data.Dataset
$DataAdapter.Fill($Dataset)
$Connection.Close()
# Method1:
foreach ($Row in $Dataset.Tables[0].Rows) {
Write-Host "col_1:$($Row.Id) col_2:$($Row.CreatedDateTime) col_3:$($Row.DeactivatedDateTime)"
}
# Method2:
foreach ($Row in $Dataset.Tables[0].Rows) {
Write-Host "col_1:$($Row[0]) col_2:$($Row[1]) col_3:$($Row[2])"
}
# Method3:
for ($i = 0; $i -lt $Dataset.Tables.Count; $i++) {
$Dataset.Tables[$i] | format-table | out-host
}
DAに記入する方法のコードを掲載できますか?なぜなら、 'invoke-sqlcmd' PowerShellコマンドレットを使用せずにPowerShellオブジェクトを返すだけでデータを印刷しようとしているのであれば、あなたはDAを一度埋めて、同じ$ Dataset –
で3つのメソッドを実行すると仮定します。それはより簡単に作業することができます。たとえば、 '$ data = invoke-sqlcmd -serverinstance 'server \ instance' -database 'db' -query '私のselect文またはexec文です。 $ data | select-object -property columnname、columnname2 ##その他のデータアクセスメソッド $ data.ColumnName' '$ data'オブジェクトをループに入れ、レコードと同じ方法でレコードにアクセスすることもできます。解決策としてこれに興味があるなら、私は完全な例で答えを投稿します。 – jkdba
@JoeC、コードが転記されています。 –