2017-02-07 6 views
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 
} 
+0

DAに記入する方法のコードを掲載できますか?なぜなら、 'invoke-sqlcmd' PowerShellコマンドレットを使用せずにPowerShellオブジェクトを返すだけでデータを印刷しようとしているのであれば、あなたはDAを一度埋めて、同じ$ Dataset –

+0

で3つのメソッドを実行すると仮定します。それはより簡単に作業することができます。たとえば、 '$ data = invoke-sqlcmd -serverinstance 'server \ instance' -database 'db' -query '私のselect文またはexec文です。 $ data | select-object -property columnname、columnname2 ##その他のデータアクセスメソッド $ data.ColumnName' '$ data'オブジェクトをループに入れ、レコードと同じ方法でレコードにアクセスすることもできます。解決策としてこれに興味があるなら、私は完全な例で答えを投稿します。 – jkdba

+0

@JoeC、コードが転記されています。 –

答えて

0
SELECT * FROM MyTableにクエリを変更し

し、それが動作するはずです。今はCreatedDateTimeが表示されているだけなので、クエリが返されます。

関連する問題