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

MS SQL Server Discussion :

Sous requetes retourne plusieurs variables


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 158
    Points : 73
    Points
    73
    Par défaut Sous requetes retourne plusieurs variables
    bonjour a tous,

    j'utilise un script qui est sencé me permettre de créer par la suite une hierarchie dans ma table hier_item
    scripts:

    declare @V_CHI_CODE as nvarchar(10)
    declare @V_PAR_CODE as nvarchar(10)
    declare @V_HIER_NAME as nvarchar(6)
    declare @CHI_ID as int
    declare @PAR_ID as smallint

    DECLARE hier_cursor CURSOR FOR SELECT V_CHI_CODE, V_PAR_CODE, V_HIER_NAME, CHI_ID, PAR_ID FROM hier_item
    OPEN hier_cursor
    FETCH NEXT FROM hier_cursor into @V_CHI_CODE, @V_PAR_CODE, @V_HIER_NAME, @CHI_ID, @PAR_ID
    WHILE @@FETCH_STATUS = 0
    BEGIN
    Update hier_item
    set PAR_ID = (select CHI_ID from hier_item where V_CHI_CODE = @V_PAR_CODE and V_HIER_NAME=@V_HIER_NAME)
    WHERE CURRENT OF hier_cursor
    FETCH NEXT FROM hier_cursor into @V_CHI_CODE, @V_PAR_CODE, @V_HIER_NAME, @CHI_ID, @PAR_ID
    END
    CLOSE hier_cursor
    DEALLOCATE hier_cursor


    le script se suffit a lui meme, nan ??

    seul le champ par_id est a null
    la cle primaire est basée sur v_chi_code, v_hier_name et v_par_ code
    et lorsque je l'utilise
    , j'aiune erreure:

    L'étape « MAJ SQL » a échouéSource de l'erreur de l'étape : Lot Microsoft Data Transformation Services (DTS)
    Description de l'erreur de l'étape :La tâche a rapporté une erreur d'exécution.
    (Microsoft OLE DB Provider for SQL Server (80004005): L'instruction a été arrêtée.)
    (Microsoft OLE DB Provider for SQL Server (80004005): La sous-requête a retourné plusieurs valeurs.
    Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >=
    ou quand elle est utilisée en tant qu'expression.)
    Code d'erreur de l'étape : 8004043B
    Fichier d'aide de l'erreur de l'étape :sqldts80.hlp
    ID du contexte de l'aide de l'erreur de l'étape :1100


    et j evois pas en quoi le fait d'avoir un emlti reponse dans ma sousrequete pose probleme

    peu etre du au Primary key ?
    ou parce que un curseur ne peut pas gerer le smultireponse ??

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 395
    Points
    28 395
    Par défaut
    Citation Envoyé par poosh
    Description de l'erreur de l'étape :La tâche a rapporté une erreur d'exécution.
    (Microsoft OLE DB Provider for SQL Server (80004005): L'instruction a été arrêtée.)
    (Microsoft OLE DB Provider for SQL Server (80004005): La sous-requête a retourné plusieurs valeurs.
    Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >=
    ou quand elle est utilisée en tant qu'expression.)
    Code d'erreur de l'étape : 8004043B
    Fichier d'aide de l'erreur de l'étape :sqldts80.hlp
    ID du contexte de l'aide de l'erreur de l'étape :1100


    et j evois pas en quoi le fait d'avoir un emlti reponse dans ma sousrequete pose probleme

    peu etre du au Primary key ?
    ou parce que un curseur ne peut pas gerer le smultireponse ??
    Le message d'erreur est assez clair : la sous-requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CHI_ID from hier_item where V_CHI_CODE =  @V_PAR_CODE and V_HIER_NAME=@V_HIER_NAME
    retourne plusieurs lignes, ce qui est assez gênant pour l'opération d'affectation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set PAR_ID = (sous-requête)
    qui ne sait pas quelle valeur choisir dans la liste

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    est ce que c'est du a des doublons

    car il est posssible qu il faille redefinir le cle
    vu que jai du le fair epour la table hier_item sans avoir eu lapprobation du createur de la structure de la base ??

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 395
    Points
    28 395
    Par défaut
    Citation Envoyé par poosh
    est ce que c'est du a des doublons ?
    L'identifiant (V_CHI_CODE, V_HIER_NAME) n'est pas suffisant pour assurer l'unicité du résultat retourné.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    ok je vois a peu pres ce que tu veux dire:

    en fait dans ma sous requete il faut que je trouve un moyen de differencier les enregistrement trouver ....

    comme je te le disais j 'ai du mettre en place un cham en plus pour la PK et a cette occasion je nai pas change les scripts
    docn effectivement ca doit etre ca !!

    je recherche un truc pour l'uncite et j ete tien au courant pour verification

    merci d'avance

  6. #6
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    pour resoudre ce probleme est ce que je peux utiliser des curseurs imbriqués:

    1. dans la boucle begin
    ...WHILE @@FETCH_STATUS = 0
    BEGIN


    je pense compter les valeur que jobtiens avec ca:
    variable = select count(distinct(chi_id))
    from hier_item
    where v_chi_code=@v_par_code and v_hier_name = @v_hier_name

    puis essayer de mettre un curseur en place afin de mettre a jour ma table avec les valeurs (une par une) de ce nouveau curseur

    idée donne a peu pres ca:
    si variable existe
    for i allant de 1 à variable
    on met dans un curseur toute le svaleurs trouvées

    comme ca ca me donne un curseur ou un etable (je ne sais pas le quel est realisable en sql) contenant les doublons precedents


    et enfin j emet a jour ma table avec les valeurs se trouvant dans ce nouveau curseur...

    est ce possible ? et ai je ete assez clair ??

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    je ne crois avoir deja testée mais oui tu dois pouvoir utiliser des cursors imbriqués

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 158
    Points : 73
    Points
    73
    Par défaut
    je ne sais pas si ca marche

    mais j'ai resolu mon probleme autrement par une modification du ficheir source
    pour n epas toucher au script ..............

    merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SI la sous-requête retourne plusieurs résultats, ALORS
    Par italia57 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 17/09/2014, 14h45
  2. fonction qui retourne plusieurs variables
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2011, 11h06
  3. Réponses: 3
    Dernier message: 28/07/2009, 16h01
  4. Fonctionnant retournant plusieurs variables
    Par _SamSoft_ dans le forum C
    Réponses: 8
    Dernier message: 28/02/2007, 16h57
  5. [UPDATE]Sous-requetes avec plusieurs nuplets
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/07/2005, 18h28

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