IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSIS Discussion :

Paramètres pour une commande SQL


Sujet :

SSIS

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Paramètres pour une commande SQL
    Bonjour,

    J'utilise une commande OLE DB pour lancer une procédure stockée.
    L'adressage des paramètres de la procédure stockée se passe bien avec les points d'interrogation.
    Mon soucis vient du fait qu'une partie des procédures que je dois appeler ont des listes en paramètres.
    Si je mets aussi les points d'interrogation au niveau de la déclaration de ma liste, SSIS me dit qu'il détecte plusieurs fois le premier paramètre de la procédure.
    Exemple :
    Declare @Liste as MALISTE
    INSERT INTO @Liste(PersonID,Fonction)
    select '2C74F6CC-FF0C-47CA-9C9C-8756AEC887C8','fonction'

    EXEC MA_PROC ?,?,@Liste

    Si j'essai de mettre select ?,? dans cet exemple, cela ne fonctionne pas.

    Quelqu'un a déjà eu ce type de besoin?

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Ca ne me semble pas possible de faire ça avec une brique SSIS "graphique".
    Je te suggère moi de le faire avec une commande de script.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci,

    Aurais tu un exemple?

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Avant de te donner un exemple de script SSIS je voudrais savoir quand même quelque chose sur ta procédure stockée.

    Personnellement je n'ai jamais envoyé de liste en paramètre d'une procédure stockée mais pourquoi pas !

    Je voulais juste savoir si, indépendamment de SSIS, tu l'avais testé ? (Avec Management Studio par exemple) et commenttu l'avais appelé (avec un exemple).
    Ca orientera le code SSIS

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Le code donné dans mon premier post, même si j'ai changé le nom des procédures/variables et simplifié l'écriture, fonctionne.
    Le soucis c'est que l'on ne peut pas laisser les GUID en dur car ça ne marche que sur un exemple précis.
    Le select qui me permet d'insérer dans la liste doit avoir une clause where et se baser sur une variable passée en paramètre.

    On a continué à tester.
    Si l'on fait juste la première partie, SSIS comprend bien le paramètre et me permet de l'affecter.
    Declare @Liste as MALISTE
    INSERT INTO @Liste(PersonID,Fonction)
    select PersonID,Fonction from Personne where PersGUID = ?

    Si j'utilise juste :
    Declare @Liste as MALISTE
    INSERT INTO @Liste(PersonID,Fonction)
    select '2C74F6CC-FF0C-47CA-9C9C-8756AEC887C8','fonction'

    EXEC MA_PROC ?,?,@Liste

    Cela fonctionne aussi. Si je mixe les 2 dans un même composant, SSIS n'est plus d'accord.

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Et si tu fais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Declare @Liste as MALISTE
     INSERT INTO @Liste(PersonID,Fonction) 
     select PersonID,Fonction from Personne where PersGUID = cast(? as uniqueidentifier)
    Et ton paramètre serait du coup une chaine de caractère.

    J'avoue que je ne sais pas, je n'ai pas testé mais ça vaut le coup de tenter.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ca fait toujours pareil, tant que je n'utilise que des paramètres soit pour la partie déclaration de la liste soit pour la procédure stockée, cela fonctionne. Si j'utilise un code avec les 2 méthodes, SSIS est perdu et j'ai des messages d'erreur(il ne valide pas le composant).

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Je ne comprends pas : si tu utilises les points d'interrogations comme tu l'avais fait à ta première requête : cela veut dire que tu es soit dans une tache de commande SQL ou T SQL dans les taches de flux soit tu es dans une source de données ou une commande OLE DB dans un flux de données.
    Dans les deux cas il s'agit de commande OLE DB ou le point d'interrogation fait mappage avec un des paramètres que tu auras choisis. Donc oui il faut un paramètre ! Mais libre à toi de l'alimenter comme tu veux

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    J'utilise bien une commande OLE DB

    Mais comme je l'ai dit plus haut, SSIS ne veut pas que je mette des points d'interrogation dans le TSQL avant le lancement de la procédure ET dans la procédure stockée
    A ce moment là il me donne un message d'erreur en me disant que j'ai déclaré plusieurs fois le premier paramètre de la procédure où je met un point d'interrogation.

  10. #10
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    On est d'accord que tu utilises ce composant là ;

    Nom : Capture.PNG
Affichages : 871
Taille : 17,4 Ko

    Si c'est la cas tu peux alimenter tous la requête avec des point d'interrogation que tu veux mais dans l'onglet Mappage de paramètre il faut que le Nom du paramètre soit 0, 1, 2 et ainsi de suite dans l'ordre des ?

  11. #11
    Membre éprouvé
    Avatar de Elros
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2009
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 403
    Points : 912
    Points
    912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par dactyman Voir le message
    J'utilise bien une commande OLE DB

    Mais comme je l'ai dit plus haut, SSIS ne veut pas que je mette des points d'interrogation dans le TSQL avant le lancement de la procédure ET dans la procédure stockée
    A ce moment là il me donne un message d'erreur en me disant que j'ai déclaré plusieurs fois le premier paramètre de la procédure où je met un point d'interrogation.
    J'utilise souvent le composant OLE DB Commande avec ce genre de requête et je n'ai pas aucun soucis (exemple de requête ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE @DK as int
     
    SET @DK = ?
     
    UPDATE [STG].[FACTURE]
    	SET [VEH_ID] = ?
    	,[MONTANT_HT] = ?
    WHERE [CLIENT_ID] = @DK AND [FACT_ID] = ?
    Par contre, si tu veux utiliser les variables avec ton propre type ou table, les choses se compliquent avec SSIS.
    Est-ce que tu pourrais nous donner l'erreur exacte que SSIS ou SQL server te retourne ?

    Elros
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton

    Venez faire un petit tour sur mon blog : Elros - Bienvenue dans le monde de la Business Intelligence

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    J'utilise jamais la commande OleDb je préfère les tache de requête SQL mais visiblement ton problème vient de la validation du composant comme tu l'as signalé.
    Il m'est difficile de faire les tests car je n'ai pas ta procédure stockée ni les données à injecter.
    Cela étant en regardant le composant j'ai vu qu'il y avait un paramètre ValidateExternalMedadata positionné à true par défaut, peut être que s'il était à false, au pire tu aurais des erreurs au lancement et tu en serais un peu plus.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Non, c'est commande OLE DB que j'utilise (SDT pour Visual studio 2013)
    Nom : SSIS.jpg
Affichages : 842
Taille : 6,2 Ko

    La validation est importante pour qu'il puisse me faire le mappage des colonnes.

    Le message d'erreur est : Erreur sur ... : Il existe plus d'une colonne source de données nommée @PersonGuid. Les noms des colonnes sources de données doivent être uniques.

    Et merci pour votre rapidité de réponse

  14. #14
    Membre éprouvé
    Avatar de Elros
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2009
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 403
    Points : 912
    Points
    912
    Billets dans le blog
    9
    Par défaut
    Dans ce cas c'est un problème de sortie.

    Lorsque tu exécutes ta procédure, est-ce que tu "set" le résultat ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @SQLString nvarchar(500);
     
    SET @SQLString = N'SELECT F.VEH_ID, F.MONTANT_HT
    			       FROM [STG].[FACTURE] F';
     
    EXECUTE sp_executesql  @SQLString
    WITH RESULT SETS
    (
      (
    	VEH_ID INT,
    	MONTANT_HT numeric(11,3)
      )
    );
    Ce genre de code est exploitable même dans un Lookup ;-)

    Elros
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton

    Venez faire un petit tour sur mon blog : Elros - Bienvenue dans le monde de la Business Intelligence

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Non je ne SET pas le résultat.
    Je pense que mon écriture est bonne :

    Declare @Liste as MALISTE
    INSERT INTO @Liste(PersonID,Fonction)
    select PersonID,Fonction from Personne where PersGUID = ?

    EXEC MA_PROC ?,?,@Liste

Discussions similaires

  1. [SHELL] ajouter des paramètres pour une commande shell
    Par anissben dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 11/12/2010, 13h36
  2. [CR XI] Plage de date dans une commande SQL pour une analyse de pareto
    Par Gdf.pdo dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2009, 11h35
  3. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. Automatisation et/ou installer pour une bd sql
    Par ZePitou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/02/2004, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo