Question
Requête SQL mal interprêtée
- kobol56
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 10 ans 5 mois #20755
par kobol56
Requête SQL mal interprêtée a été créé par kobol56
Bonjour,
Nous avons écris un petit script qui exécute une requête SQL vers un serveur SQL Server et génère un fichier csv.
Cela fonctionne sans erreurs mais les résultats générés dans le fichiers csv ne sont pas corrects.
La requête exécutée directement sur SQL Server renvoi 1 seule ligne alors qu'avec le script PowerShell cela en renvoi 71... Le serveur interrogé est bien le même...
Est-ce les dates qui sont mal interprêtées en envoyées par le script ?
[code:1]$date = \"{0:yyyyMMddHHmmss}\" -f (get-date)
# Constantes
#############################################################################
# A MODIFIER #
#############################################################################
$server = \"SRV-SQL3\"
$database1 = \"TOTO\"
$user = \"totototo\"
$password = \"tatata\"
$extractFile1 = @\"
C:\EXTRACTION\EXTRACTIONHORMOIS\EXTRACTION $database1.csv
\"@
##############################################################################
# FIN DE A MODIFIER #
##############################################################################
$query = \"
SELECT getdate(),PSA_ETABLISSEMENT,PSA_SALARIE,PSA_LIBELLE,PSA_PRENOM,PSA_NOMJF,PSA_NUMEROSS,PSA_DATENAISSANCE,PSA_SEXE,PSA_DATEANCIENNETE,PSA_ADRESSE1,PSA_CODEPOSTAL,
PSA_VILLE,PSA_ADRESSE2,PSA_TELEPHONE,PSA_PORTABLE,PSE_EMAILPROF,PSA_LIBREPCMB3 AS VALIDEUR1,PSA_LIBREPCMB4 AS VALIDEUR2,PSA_SALAIRANN2 AS HORAIREMENS,PSA_LIBELLEEMPLOI,PSA_DATEMODIF,
PHD_PGINFOSMODIF,PHD_DATEAPPLIC,convert(decimal(10,2),replace(phd_newvaleur,',','.')) phd_newvaleur,
PSA_TRAVAILN2 AS SERVICE1,PSA_TRAVAILN3 AS SERVICE2,PSA_HORHEBDO,PCI_ORDRE,PCI_TYPECONTRAT,PCI_DEBUTCONTRAT,PCI_FINCONTRAT FROM PGHISTODETAIL, SALARIES LEFT JOIN CONTRATTRAVAIL
ON PSA_SALARIE=PCI_SALARIE LEFT JOIN DEPORTSAL ON PSA_SALARIE=PSE_SALARIE
WHERE PSA_SALARIE=PHD_SALARIE AND PHD_PGINFOSMODIF='PSA_SALAIRANN2'
and PHD_DATEAPPLIC>=dateadd(mm,-2,getdate())
and pci_debutcontrat<=phd_dateapplic and isnull(nullif(pci_fincontrat,convert(datetime,'01-01-1900',105)),convert(datetime,'31-12-2100',105))>=phd_dateapplic
ORDER BY PSA_SALARIE,PHD_DATEAPPLIC,PCI_ORDRE,PCI_DEBUTCONTRAT
\"
$connectionTemplate = \"Data Source={0};Initial Catalog={1};Trusted_Connection=False;User Id={2};Password={3};\"
$connectionString = [string]::Format($connectionTemplate, $server, $database1, $user, $password)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $query
$command.Connection = $connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
$DataSet.Tables[0] | convertto-csv -NoTypeInformation | % { $_ -replace '\",\"', ';'} | % { $_ -replace \"^`\"\",''} | % { $_ -replace \"`\"$\",''} | out-file $extractFile1 -fo -en ascii
[/code:1]
Merci pour votre retour
Nous avons écris un petit script qui exécute une requête SQL vers un serveur SQL Server et génère un fichier csv.
Cela fonctionne sans erreurs mais les résultats générés dans le fichiers csv ne sont pas corrects.
La requête exécutée directement sur SQL Server renvoi 1 seule ligne alors qu'avec le script PowerShell cela en renvoi 71... Le serveur interrogé est bien le même...
Est-ce les dates qui sont mal interprêtées en envoyées par le script ?
[code:1]$date = \"{0:yyyyMMddHHmmss}\" -f (get-date)
# Constantes
#############################################################################
# A MODIFIER #
#############################################################################
$server = \"SRV-SQL3\"
$database1 = \"TOTO\"
$user = \"totototo\"
$password = \"tatata\"
$extractFile1 = @\"
C:\EXTRACTION\EXTRACTIONHORMOIS\EXTRACTION $database1.csv
\"@
##############################################################################
# FIN DE A MODIFIER #
##############################################################################
$query = \"
SELECT getdate(),PSA_ETABLISSEMENT,PSA_SALARIE,PSA_LIBELLE,PSA_PRENOM,PSA_NOMJF,PSA_NUMEROSS,PSA_DATENAISSANCE,PSA_SEXE,PSA_DATEANCIENNETE,PSA_ADRESSE1,PSA_CODEPOSTAL,
PSA_VILLE,PSA_ADRESSE2,PSA_TELEPHONE,PSA_PORTABLE,PSE_EMAILPROF,PSA_LIBREPCMB3 AS VALIDEUR1,PSA_LIBREPCMB4 AS VALIDEUR2,PSA_SALAIRANN2 AS HORAIREMENS,PSA_LIBELLEEMPLOI,PSA_DATEMODIF,
PHD_PGINFOSMODIF,PHD_DATEAPPLIC,convert(decimal(10,2),replace(phd_newvaleur,',','.')) phd_newvaleur,
PSA_TRAVAILN2 AS SERVICE1,PSA_TRAVAILN3 AS SERVICE2,PSA_HORHEBDO,PCI_ORDRE,PCI_TYPECONTRAT,PCI_DEBUTCONTRAT,PCI_FINCONTRAT FROM PGHISTODETAIL, SALARIES LEFT JOIN CONTRATTRAVAIL
ON PSA_SALARIE=PCI_SALARIE LEFT JOIN DEPORTSAL ON PSA_SALARIE=PSE_SALARIE
WHERE PSA_SALARIE=PHD_SALARIE AND PHD_PGINFOSMODIF='PSA_SALAIRANN2'
and PHD_DATEAPPLIC>=dateadd(mm,-2,getdate())
and pci_debutcontrat<=phd_dateapplic and isnull(nullif(pci_fincontrat,convert(datetime,'01-01-1900',105)),convert(datetime,'31-12-2100',105))>=phd_dateapplic
ORDER BY PSA_SALARIE,PHD_DATEAPPLIC,PCI_ORDRE,PCI_DEBUTCONTRAT
\"
$connectionTemplate = \"Data Source={0};Initial Catalog={1};Trusted_Connection=False;User Id={2};Password={3};\"
$connectionString = [string]::Format($connectionTemplate, $server, $database1, $user, $password)
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandText = $query
$command.Connection = $connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $command
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$connection.Close()
$DataSet.Tables[0] | convertto-csv -NoTypeInformation | % { $_ -replace '\",\"', ';'} | % { $_ -replace \"^`\"\",''} | % { $_ -replace \"`\"$\",''} | out-file $extractFile1 -fo -en ascii
[/code:1]
Merci pour votre retour
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 5 mois #20757
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Requête SQL mal interprêtée
Salut,
remplace déjà cette ligne :
[code:1]$SqlAdapter.Fill($DataSet)[/code:1]
par
[code:1][void]$SqlAdapter.Fill($DataSet)[/code:1]
Car la méthode Fill émet un objet dans le pipeline.
La table $DataSet.Tables[0] contient combien de ligne ?
>>Est-ce les dates qui sont mal interprêtées en envoyées par le script ?
$Query ne semble pas contenir de substitution de variable, cela reste du texte. Tu peux utiliser les simple quote : $query =' ... '.
$Date n'est pas utilisée
Tu peux aussi vérifier si le serveur reçoit bien le même texte de ta requête( pb d'encodage ?).
remplace déjà cette ligne :
[code:1]$SqlAdapter.Fill($DataSet)[/code:1]
par
[code:1][void]$SqlAdapter.Fill($DataSet)[/code:1]
Car la méthode Fill émet un objet dans le pipeline.
La table $DataSet.Tables[0] contient combien de ligne ?
>>Est-ce les dates qui sont mal interprêtées en envoyées par le script ?
$Query ne semble pas contenir de substitution de variable, cela reste du texte. Tu peux utiliser les simple quote : $query =' ... '.
$Date n'est pas utilisée
Tu peux aussi vérifier si le serveur reçoit bien le même texte de ta requête( pb d'encodage ?).
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.040 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Requête SQL mal interprêtée