nobby1805
Goto Top

SQLServer-Tabelle(n) lesen mit PowerShell

Hallo,

ich habe ein PowerShell-Script erstellt um eine Tabelle aus einer SQLServer (Express) Datenbank zu lesen.

#
import-module sqlserver
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$serverObj = new-object Microsoft.SqlServer.Management.Smo.Server("(localdb)\mssqllocaldb")
$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database ($serverObj, "powershellDB")

#$SQLOutput =
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' `
-Databasename powershellDB -schemaname "dbo" -tablename "Objekte" `
-columnname objId,Name,Pfad -outputas datarows
#
#$sqloutput

Das klappt auch ...
Jetzt will ich aber auch noch eine 2.Tabelle aus dieser Datenbank lesen ... und das klappt nicht, es wird nur der Inhalt der 1. Tabelle ausgegeben

#
import-module sqlserver
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$serverObj = new-object Microsoft.SqlServer.Management.Smo.Server("(localdb)\mssqllocaldb")
$databaseObj = new-object Microsoft.SqlServer.Management.Smo.Database ($serverObj, "powershellDB")

#$SQLOutput =
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' `
-Databasename powershellDB -schemaname "dbo" -tablename "Objekte" `
-columnname objId,Name,Pfad -outputas datarows
#
#$sqloutput
"trennen"
#
#$SQLOutput1 =
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' `
-Databasename powershellDB -schemaname "dbo" -tablename "Attribute" `
-columnname Attrid,Attribut,AttributArt -outputas datarows -topn 3
#
#$sqloutput1
"ende"

Interessanterweise erscheinen zwischen "trennen" und "ende" 3 Leerzeilen (vermutlich wegen TopN=3)

Wenn ich die 3 Zeilen des ersten read-sqltabledata-Aufrufs auskommentiere, dann kommen zwischen "trennen" und "ende" genau die erwarteten 3 rows aus der Tabelle

Hat jemand eine Idee was ich falsch mache?

Danke und viele Grüße Nobby

Content-ID: 3682039509

Url: https://administrator.de/forum/sqlserver-tabellen-lesen-mit-powershell-3682039509.html

Ausgedruckt am: 23.12.2024 um 05:12 Uhr

MysticFoxDE
MysticFoxDE 18.08.2022 aktualisiert um 08:14:50 Uhr
Goto Top
Moin Nobby1805,

eigentlich sollte es vereinfacht bereits schon so funktionieren.

import-module sqlserver
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Objekte" -columnname objId,Name,Pfad -outputas datarows  
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Attribute" -columnname Attrid,Attribut,AttributArt -outputas datarows -topn 3  

Gruss Alex

P.S. Du hast jetzt aber nicht rein zufällig am 18.05 Geburtstag, oder?
Nobby1805
Nobby1805 18.08.2022 um 10:05:03 Uhr
Goto Top
Moin Alex,

1. leider nicht ... identisches Verhalten
2. Zufälle gibt's face-wink

Gruß Nobby
MysticFoxDE
MysticFoxDE 18.08.2022 um 10:45:49 Uhr
Goto Top
Moin Nobby,

1. leider nicht ... identisches Verhalten
2. Zufälle gibt's face-wink

😖, heisst das, dass du auch hier das Ergebnis der ersten Abfrage bekommst und das zweite nicht?
Und wenn du nur die zweite Abfrage ausführst, dann funktioniert sie?

Gruss Alex
Nobby1805
Nobby1805 18.08.2022 um 11:15:22 Uhr
Goto Top
Hallo Alex,

genau so ist es face-sad

oder besser gesagt ... war es.
Ich war nicht untätig und habe nur gewartet ob mir jemand eine Lösung liefert, sondern weiter gesucht und irgendwann dann etwas gefunden

import-module sqlserver

read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Objekte" -columnname objId,Name,Pfad -outputas datarows  
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Attribute" -columnname Attrid,Attribut,AttributArt -outputas datarows -topn 3 | format-table  

(in Zeile 4 ganz hinten schauen)
jetzt muss ich nur noch irgendwo oder von irgendwem eine Erklärung finden, warum das so ist

Gruß Nobby
MysticFoxDE
Lösung MysticFoxDE 18.08.2022 aktualisiert um 12:53:58 Uhr
Goto Top
Moin Nobby,

oder besser gesagt ... war es.
Ich war nicht untätig und habe nur gewartet ob mir jemand eine Lösung liefert, sondern weiter gesucht und irgendwann dann etwas gefunden

import-module sqlserver

read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Objekte" -columnname objId,Name,Pfad -outputas datarows  
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Attribute" -columnname Attrid,Attribut,AttributArt -outputas datarows -topn 3 | format-table  

(in Zeile 4 ganz hinten schauen)
jetzt muss ich nur noch irgendwo oder von irgendwem eine Erklärung finden, warum das so ist

ähm, das ist jetzt kein Witz, als ich vorhin auf der Schüssel gessesen bin, ist mir genau das in den Sinn gekommen. 🤪

import-module sqlserver

read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Objekte" -columnname objId,Name,Pfad -outputas datarows  | FT -AutoSize  
read-sqltabledata -ServerInstance '(localdb)\mssqllocaldb' -Databasename powershellDB -schemaname "dbo" -tablename "Attribute" -columnname Attrid,Attribut,AttributArt -outputas datarows -topn 3 | FT -AutoSize  

So ist das nun zu 100% korrekt. 😎

jetzt muss ich nur noch irgendwo oder von irgendwem eine Erklärung finden, warum das so ist

Den Grund kann ich dir auch nennen.
Ohne das FT, versucht PS die Ausgabe der zweiten Zeile in der Darstellungsstruktur der ersten Zeile auszugeben.
Ja, ich weiss -->😵‍💫, MS halt eben.
Und mit FT (Format-Table), erzwingst du quasi, dass die Ausgabe jeder Befehlszeile, immer neu formatiert wird. 😉

Das ist mir ähnlich schon kräftig mal auf die Füsse gefallen, aber eben noch nicht beim SQL.
SQL's schreibe ich normalerweise nativ und nicht per PS, dann flutschen diese auch etwas schneller. 🤪

Beste Grüsse aus BaWü

Alex
Nobby1805
Nobby1805 18.08.2022 um 16:51:31 Uhr
Goto Top
Hallo Alex,

ähm, das ist jetzt kein Witz, als ich vorhin auf der Schüssel gessesen bin, ist mir genau das in den Sinn gekommen. 🤪
solche "Eingebungen" kommen mir oft unter der Dusche face-smile

Ohne das FT, versucht PS die Ausgabe der zweiten Zeile in der Darstellungsstruktur der ersten Zeile auszugeben.
Das kann ich bestätigen, wenn ich die 2. Tabelle um einen Eintrag erweitere der genau so heißt wie einer aus der ersten Tabelle, dann wird dieser und nur dieser auch ohne die Ergänzung durch FT dargestellt.

Danke für deine Unterstützung
Gruß aus Essen Nobby