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

Développement SQL Server Discussion :

Requête dynamique, curseur dynamique.


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 45
    Par défaut Requête dynamique, curseur dynamique.
    Bonjour,

    J'ai un petit problème en T-SQL. Je dispose d'une requête dynamique c'est à dire que le nombre de champs dans la clause SELECT est en fonction de ce qu'a sélectionné l'utilisateur. J'ai réussi de même à créer un curseur dynamique c'est à dire que j'ai une variable qui contient les variables des champs du SELECT.


    Imaginons que l'utilisateur sélectionne les champs : matricule, nom, prenom
    la variable du curseur @column contiendra @matricule, @nom, @prenom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
             SET @column = '@'+ @column
    	 SET @columnDeclare = REPLACE(@column,',',' NVARCHAR(MAX),')
    	 SET @columnDeclare = 'DECLARE ' + @columnDeclare + ' NVARCHAR(MAX)'
             SET @column = REPLACE(@ai_column,',',',@')
             SET @requete = 'SELECT ' + @ai_column + ' FROM v_a_elementFixeIntervenants  WHERE Matricule '
    	+ ' IN (SELECT Matricule '
    	+ ' FROM f_a_elementFixeIntervenants('''+ @ai_societe + ''',''' + @ai_StringdateD + ''',''' + @ai_StringdateF + ''')) '
    	+ ' AND Date_d_entree >= ISNULL(''' + @ai_StringdateD + ''', Date_d_entree) '
    	+ ' AND Date_d_entree <= ISNULL(''' + @ai_StringdateF + ''', Date_d_entree) '
    	+ ' AND date_debut_situation >= ISNULL(''' + @ai_StringdateD + ''', date_debut_situation) '
    	+ ' AND date_debut_situation <= ISNULL(''' + @ai_StringdateF + ''', date_debut_situation) '
    	+ ' AND Type_Intervenant = ''INT'' '
    	+ ' ORDER BY Matricule, Date_debut_situation , Societe ASC '
    	SET @curseur = ' DECLARE cursorSociete CURSOR FOR ' + @requete
    	-- Ouverture du curseur
    	SET @curseur = @curseur + ' OPEN cursorSociete '
    	-- Parcours du curseur
    	SET @curseur = @curseur + ' FETCH FROM cursorSociete INTO ' + @column
    	SET @curseur = @curseur + ' WHILE @@fetch_Status = 0 '
    	SET @curseur = @curseur + ' BEGIN '
    --------------------------
    --Comparaison des variable contenue dans @column
    --------------------------
    	SET @curseur = @curseur + ' FETCH FROM cursorSociete '
    	SET @curseur = @curseur + ' END '
    	SET @curseur = @curseur + ' DEALLOCATE cursorSociete '
    C'est la que mon problème arrive. Comment alors que @matricule, @nom, @prenom sont dynamique je peux faire des comparaisons entre la valeur de @matricule et la valeur n+1 de @matricule?



    D'avance merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 55
    Par défaut Utilisation d'un curseur.
    Bonjour Thomas,

    La solution de ton problème me semble assez simple, si je l'ai bien compris évidemment.

    En #15: ajouter 'LOCAL SCROLL STATIC' (j'aime bien porter des bretelles et une ceinture, au cas où...

    Déclarer 2 groupes de variables locales (par ex. @Mat1 et @Mat2)

    Faire un FETCH NEXT ... INTO ta ou tes variables locales, série #1 (par ex. @Mat1)

    WHILE @@FETCH_STATUS = 0
    BEGIN
    Faire un FETCH NEXT ... INTO ta ou tes variables locales, série #2 (par ex. @Mat2)
    insère ici ton traitement
    Placer la série #2 dans la série #1
    END

    Hé voilà,
    JLCantara.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Cela étant, les curseurs, c'est ce qu'il y a de pire en termes de performances ...

    @++

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

Discussions similaires

  1. [PL/SQL] Curseur dynamique
    Par dcollart dans le forum Oracle
    Réponses: 2
    Dernier message: 09/11/2009, 10h08
  2. Requête tableau croisé dynamique + état
    Par willytito dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/07/2006, 15h23
  3. Curseur dynamique
    Par dcollart dans le forum Oracle
    Réponses: 1
    Dernier message: 09/05/2006, 11h06
  4. ODBC et curseurs dynamique!!!
    Par F@keur dans le forum MFC
    Réponses: 7
    Dernier message: 30/03/2005, 20h05
  5. Enregistrement issu d'un curseur dynamique
    Par vanessaf22 dans le forum SQL
    Réponses: 26
    Dernier message: 15/04/2004, 13h26

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