Question [Résolu] Exécution requête SQL depuis un script PS

Plus d'informations
il y a 10 ans 5 mois #20870 par Faucon
Bonsoir,

Je reviens vers vous aujourd'hui car je doit écrire un script PowerShell qui exécutera plusieurs requêtes SQL les unes à la suite des autres, l'exécution de la première requête à l'air de fonctionner, mon problème ne se situe pas la, je doit récupérer le résultat de la première requête et le mettre dans une variable afin de pouvoir appeler cette variable dans le deuxième requête et par la suite faire une comparaison entre les résultats des deux requêtes pour passer au traitement des requêtes 3 et 4.

Je ne sais pas si je suis assez clair.

Merci d'avance pour votre aide,

Cordialement,
Mitakue.

PS : Voici mon script

[code:1]param

(

#environnement

[String]$lieu

)



#. \"C:\Maintenance\Fonctions_CG\PS1-CtmVar.ps1\"

$SQLDateToday = Get-Date -UFormat %Y%m%d

$server=(New-Object -ComObject WScript.Network).computername



#======================================================================================

# Récupération et comparaison de la liste des porte-feuille et des positions comptables

#======================================================================================



#=========================

# Requete executee sur MAD

#=========================



if ($lieu -eq \"TST\"«»)

{

$SQLServer=\"SRVSQL\InstanceSQL\"

$SQLDBName= \"Database\"

}

elseif($lieu -eq \"PRD\"«»)

{

$SQLServer= \"SRVSQL\InstanceSQL\"

$SQLDBName= \"Database\"


}



#==================

#Connexion a la BDD

#==================



$SqlConnection = new-object system.data.sqlclient.sqlconnection

$SqlConnection.connectionstring = \"Server= $SQLServer; database= $SQLDBName;Integrated Security = True\"

$SqlConnection.Open()



#=======================

#Execution de la requete

#=======================



$SqlQuery = \"DECLARE @Ptf_Liste VARCHAR(255)

DECLARE @Ptf_Table Table (PtfId int)



INSERT INTO @Ptf_Table (PtfId )

SELECT DISTINCT [Ptf_Pts_Id]

FROM [RSK_MAD_TST].[p_data].[T_Transco_Rskm_ReportPerimeter]

WHERE IsWeeklyFriday=1

AND EntityType= 'Portfolio'

ORDER BY 1





SELECT @Ptf_Liste = COALESCE (@Ptf_Liste + ', ', '') + CONVERT (VARCHAR(128),PtfId)

FROM @Ptf_Table





SELECT @Ptf_Liste\"



$SqlCmd = New-object system.data.sqlclient.SqlCommand

$SqlCmd.connection = $SqlConnection

$SqlCmd.commandtext = $SqlQuery



$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$SqlAdapter.Fill($DataSet)



$SqlConnection.Close()



#========================

#Requete executee sur VOM

#========================



if ($lieu -eq \"TST\"«»)

{

$SQLServer=\"$server\InstanceSQL\"

$SQLDBName= \"Database\"


}

elseif($lieu -eq \"PRD\"«»)

{

$SQLServer= \"$server\InstanceSQL\"

$SQLDBName=\"Database\"


}



#==================

#Connexion a la BDD

#==================



$SqlConnection1 = new-object system.data.sqlclient.sqlconnection

$SqlConnection1.connectionstring = \"Server= $SQLServer; database= $SQLDBName;Integrated Security = True\"

$SqlConnection1.Open()



#=======================

#Execution de la requete

#=======================



$SqlQuery1 = \"select count(*) from TF_PositionComptable pc where

pc.PtfId=@ptf_id and pc.Dat=@Dat\"

$SqlCmd1 = New-object system.data.sqlclient.SqlCommand

$SqlCmd1.connection = $SqlConnection1

$SqlCmd1.commandtext = $SqlQuery1



$SqlAdapter1 = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter1.SelectCommand = $SqlCmd1

$DataSet1 = New-Object System.Data.DataSet

$SqlAdapter1.Fill($DataSet1)



#======================================================================================

#Comparaison de la valeur des variables avec retour code d'erreur si pas de concordance

#======================================================================================



if($SqlAdapter -ne $SqlAdapter1)

{

exit

}



#=====================================================================================================

# Récupération et comparaison de la liste des portes-feuilles et des positions comptables sous-jacents

#=====================================================================================================



#========================

#Requete executee sur VOM

#========================



#=======================

#Execution de la requete

#=======================



$SqlQuery2 = \"select p.PtfId,p.Cod,p.Lib from TF_PositionComptable pc

join TR_Security s on pc.SecCashId = s.SecId and pc.Dat = s.Dat

join TD_Portefeuille p on p.TickerBloom = s.TickerBloom

where pc.PtfId =@ptf_id and s.Dat =@Dat

and ClassSecId='MF'\"



$SqlCmd2 = New-object system.data.sqlclient.SqlCommand

$SqlCmd2.commandtext = $SqlQuery2



$SqlAdapter2 = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter2.SelectCommand = $SqlCmd2

$DataSet2 = New-Object System.Data.DataSet

$SqlAdapter2.Fill($DataSet2)



#========================

#Requete executee sur VOM

#========================



#=======================

#Execution de la requete

#=======================



$SqlQuery3 = \"select p.PtfId,p.Cod,p.Lib from TF_PositionComptable pc

join TR_Security s on pc.SecCashId = s.SecId and pc.Dat = s.Dat

join TD_Portefeuille p on p.TickerBloom = s.TickerBloom

where pc.PtfId =@ptf_id and s.Dat =@Dat

and ClassSecId='MF'\"



$SqlCmd3 = New-object system.data.sqlclient.SqlCommand

$SqlCmd3.commandtext = $SqlQuery3



$SqlAdapter3 = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter3.SelectCommand = $SqlCmd3

$DataSet3 = New-Object System.Data.DataSet

$SqlAdapter3.Fill($DataSet3)



$SqlConnection1.Close()



#======================================================================================

#Comparaison de la valeur des variables avec retour code d'erreur si pas de concordance

#======================================================================================



if($SqlAdapter2 -ne $SqlAdapter3)

{

exit

}[/code:1]<br><br>Message édité par: Arnaud, à: 22/10/15 19:38

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 5 mois #20873 par Faucon
Bonjour à tous,

Après investigation, j'ai trouvé la solution à mon problème, il faut en faite rajouter l'instruction ExecuteScalar()

[code:1]$SqlCmd3.ExecuteScalar()
$QueryResult3 = $SqlCmd3.ExecuteScalar()[/code:1]

Du coup j'ai bien le résultat de ma requête présent dans ma variable $QueryResult3.

J’espère que cela pourra être utile à d'autres.

Cordialement,
Mitakue

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 5 mois #20874 par Arnaud Petitjean
Salut Mitakue,

Merci d'être revenu poster la solution. Elle servira sûremment à d'autres personnes ! :)

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.067 secondes
Propulsé par Kunena