Question [Résolu] Exécution requête SQL depuis un script PS
- Faucon
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 43
- Remerciements reçus 0
il y a 10 ans 5 mois #20870
par Faucon
[Résolu] Exécution requête SQL depuis un script PS a été créé 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
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.
- Faucon
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 43
- Remerciements reçus 0
il y a 10 ans 5 mois #20873
par Faucon
Réponse de Faucon sur le sujet Re:Exécution requête SQL depuis un script PS
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
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.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 10 ans 5 mois #20874
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:Exécution requête SQL depuis un script PS
Salut Mitakue,
Merci d'être revenu poster la solution. Elle servira sûremment à d'autres personnes !
Arnaud
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- [Résolu] Exécution requête SQL depuis un script PS