我有,我認爲,它是一個真正的頭部劃痕。使用Powershell解析SQL數據時遇到問題
我正在訪問數據庫以獲取帳戶列表。每個帳戶都有一個account_id和account_parent_id屬性(在其他幾個屬性中)。如果該帳戶是另一個帳戶的子帳戶,則account_parent_id具有父級的帳戶ID,如果該帳戶是父級(或沒有子級),則account_parent_id爲空。只有兩個級別,所以如果一個帳戶有一個或多個孩子,它不會有父母。
我需要的輸出是帳戶號碼(如果該帳戶沒有子女)以及父母和所有子女(逗號分隔)的帳戶號碼,如果有子女。這裏是我的代碼:
$SQLServer = "<database fqdn>"
$SQLDBName = "<databaes name>"
$uid ="<username>"
$pwd = "<password>"
$SqlQuery = "SELECT * from <account table>"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Persist Security Info = True; User ID = $uid; Password = $pwd;"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$data = $DataSet[0].Tables
$SqlConnection.Close()
Foreach ($row in $data) {
Foreach ($account in $row) {
If ($account.parent_account_id -eq $row.account_id) {
$accts += $account.account_id
}
ElseIf ($account.parent_account_id -eq $account.account_id) {
$accts = $account.account_id
}
Return $accts
}
}
的問題是,我沒有得到任何東西到$ accts。我在這裏錯過了什麼?
謝謝。
你的命名有些奇怪。 '$ data = $ DataSet [0] .Tables'要麼是表格,要麼是多個表格。然後執行'Foreach($ data in $ data)' - 是表集合中的這些表,還是表中的行?如果他們是行,你爲什麼要做'Foreach($行中的$賬戶){'?無論哪種方式,你如何期待'$ account'和'$ row'都*具有帳戶的屬性?你爲什麼在函數外使用'Return'?並且在嵌套循環的內部循環中使用'return' - 將立即退出。你永遠不會初始化'$ accts'。 – TessellatingHeckler
您可以直接在SQL中使用類似'select account_id as id,(從account where account_parent_id = id選擇group_concat(account_id)')作爲子帳號 ,其中account_parent_id爲null;' - http://www.sqlfiddle .com /#!9/e02abc/1 – TessellatingHeckler
根據你的查詢'$ data'應該包含一個表。當你輸出'$ data |時你會得到什麼? Format-Table -AutoSize'?另外,我不認爲'foreach'循環正在做你認爲他們做的事。請顯示您的表格結構並解釋您想要匹配哪些值與哪些其他值。 –