2017-04-22 5 views
1

Ich habe eine CSV-Datei, die aus einer SQL-Datenbank exportiert wurde. Die Datei hat zwei Spalten mit 100 Datensätze: Function und DatecreatedLooping durch csv-Datei in Powershell

Deshalb möchte ich jedes einzelne Objekt sehen, die von jeder Funktion in der Datenbank verwiesen wird.

Hier ist mein Code die ich bisher geschrieben haben:

$Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', * 
       FROM dbo.fn_DependantObjects('$FunctionName', 1,  0)  
       ORDER BY ThePath" 

Bitte beachten Sie: dbo.fn_DependantObjects, ist eine Funktion, die ich bereits erstellt haben.

Ich bin noch neu in Powershell und würde mich sehr freuen, wenn mir jemand auf andere Weise helfen kann. Ich stecke fest und dieses Projekt ist hinter dem Zeitplan zurück.

Lassen Sie mich wissen.

Dank Immortal

Antwort

0

Schauen Sie sich diese Zeile aus Ihrer Anfrage:

FROM dbo.fn_DependantObjects('$FunctionName', 1,  0) 

Es versucht String Interpolation Satz zu verwenden die $FunctionName Variable in der Zeichenfolge. An dem Punkt, an dem Sie diesen Code ausführen, hat $FunctionName jedoch noch keinen Wert. Es versucht, die Zeichenfolgeninterpolation abzuschließen, wenn Sie es zuerst der Variablen $Query zuweisen, anstatt den Platzhalter für jede Iteration durch die Schleife zu speichern.

Um dies zu beheben, wollen Sie nach unten in die Schleife, die String-Variable Zuordnung Code verschieben:

$fileName = 'c:\CurrentDate.csv' 
foreach ($pattern in (Import-Csv $filename | % {$_.FunctionName})) { 
    $Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', * 
       FROM dbo.fn_DependantObjects('$FunctionName', 1,  0)  
       ORDER BY ThePath" 
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query 
} 
2

Im $Query Zeichenfolge verwenden Sie $FunctionName dem Funktionsnamen zu beziehen, aber in der foreach() Schleife Sie verwenden $pattern - das erste beheben.

Dann stellen Sie sicher, dass Sie die $Query Zeichenfolge zuweisen nach$FunctionName zugewiesen wurde:

$fileName = 'c:\CurrentDate.csv' 
foreach ($FunctionName in Import-Csv $filename | % {$_.FunctionName}) { 
    $Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', * 
       FROM dbo.fn_DependantObjects('$FunctionName', 1,  0)  
       ORDER BY ThePath" 
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query 
} 
+0

Dank Mathias, Ihre Idee hat funktioniert!! – Immortal

0

mit -format (f), wie es:

Import-Csv $filename | %{ 
    $Query= "SELECT space(iteration * 4) + TheFullEntityName + ' (' + rtrim(TheType) + ')', * 
       FROM dbo.fn_DependantObjects('{0}', 1,  0)  
       ORDER BY ThePath" -f $_.FunctionName 
    Invoke-Sqlcmd -ServerInstance "ServerName" -Database "DatabaseName" -Query $Query 

}