robdox
Goto Top

Wie Datenfeld aus SQL bei With-Anweisung in Powershell ansprechen

Hallo zusammen,

wie kann ich die Werte einer SQL - Abfrage in Powershell abrufen? Mit normeln Selectanweisungen können wir die Alias oder direkt den Tabellennamen nehmen. Bei einer With-Select-Anweisung bekomme ich keine Werte.

Hier mal ein Auszug meines Skriptes:

# SQL Funktion zum zusammenstellen der Prüftabelle
function querySQL {
    Param(
        [string]$cSQL
    )
    # Connectionstring aus config
    $connectionString = "Data Source=x; Initial Catalog=x; user id=x; pwd=x"  

    # SQL Verbindung aufbauen
    $connection            = New-Object system.data.SqlClient.SQLConnection($connectionString)
    $command              = New-Object system.data.sqlclient.sqlcommand($cSQL,$connection)
    $connection.Open()
    $adapter               = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset               = New-Object System.Data.DataSet
    
    # Tabelle erstellen
    $adapter.Fill($dataSet) | Out-Null
    $connection.Close()
    $dataSet.Tables
}

$Abfrage=
"  
with Ausgabe (Sub, MC) as
(
select	(Tour
         +'_XML_'  
         +format(Datum_Auftrag,'yyyyMMdd')  
		 +'_'  
		 +convert(varchar,(ROW_NUMBER() over (partition by tour order by tour)))
		 ) 
		,MC
		from S_Basis
		where K_List=3
               and TA='ADEG-VH'  
		and format(Datum_Au,'dd.MM.yyyy')='"+(Get-Date).AddDays(-1).ToString("dd.MM.yyyy")+"'  
)
select Ausgabe.Sub from Ausgabe
where Ausgabe.MC='2002852'  
"  
[array]$QSub  = (querySQL -cSQL $Abfrage).Sub # <-- Nicht ansprechbar
[array]$QMC  = (querySQL -cSQL $Abfrage).MC # <-- Nicht ansprechbar

Danke vorab für eure Hilfe!

Beste Grüße
D.

Content-ID: 596238

Url: https://administrator.de/contentid/596238

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

robdox
robdox 17.08.2020 um 15:11:24 Uhr
Goto Top
Worin liegt der Fehler? Ich finde auch im Internet keine geeignete Literatur.

Danke vorab!
145033
Lösung 145033 17.08.2020 aktualisiert um 16:22:10 Uhr
Goto Top
Erstens gibst du ja erst mal in deiner Funktion ein Array aus Tabellen zurück ($dataSet.Tables).

(Deine SQL Abfrage habe ich jetzt nicht auf Korrektheit geprüft, die muss natürlich überhaupt erst mal laufen bevor du weiter machst)
# SQL Funktion zum zusammenstellen der Prüftabelle
function querySQL {
    Param(
        [string]$cSQL
    )
    # Connectionstring aus config
    $connectionString = "Data Source=x; Initial Catalog=x; user id=x; pwd=x"  

    # SQL Verbindung aufbauen
    $connection            = New-Object system.data.SqlClient.SQLConnection($connectionString)
    $command              = New-Object system.data.sqlclient.sqlcommand($cSQL,$connection)
    $connection.Open()
    $adapter               = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dt               = New-Object System.Data.DataTable
    
    # Tabelle erstellen
    $adapter.Fill($dt) | Out-Null
    $connection.Close()
    return $dt
}

$Abfrage= @"  
with Ausgabe (Sub, MC) as
(
select	(Tour
         +'_XML_'  
         +format(Datum_Auftrag,'yyyyMMdd')  
		 +'_'  
		 +convert(varchar,(ROW_NUMBER() over (partition by tour order by tour)))
		 ) 
		,MC
		from S_Basis
		where K_List=3
               and TA='ADEG-VH'  
		and format(Datum_Au,'dd.MM.yyyy')='$((Get-Date).AddDays(-1).ToString("dd.MM.yyyy"))'  
)
select * from Ausgabe
where Ausgabe.MC='2002852'  
"@  

(querySQL -cSQL $Abfrage).Sub
Ich finde auch im Internet keine geeignete Literatur.
Hast du wohl die Grundlagen der Powershell übersprungen face-wink
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://4sysops.com/archives/the-powershell-here-string-preserve-text-fo ...
robdox
robdox 17.08.2020 um 19:40:01 Uhr
Goto Top
völlig falsch gesucht. Habe ich verstanden, vielen Dank!!