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 :

Update droits - groupes


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut Update droits - groupes
    Bonjour,

    Je ne sais pas comment écrire la requête suivante.

    J'ai
    - une table
    id | groupe | id-droit
    ------------------------
    1 g2 4
    1 g4 3
    2 g4 1
    3 g2 4
    ...
    - une liste d'identifiants (1, 2)
    - une liste de nouveaux droits de groupes ((g2 3)(g4 3))

    Je souhaiterai mettre à jour l'id-droit des entrées dont id se retrouve dans la liste d'identifiants si le id-droit du groupe est supérieur à celui définit dans la liste de droits de groupes.
    Donc pour la ligne 1 de la table, l'id-droit devrait être remplacé par 3 (le droit de g2 = 3 < 4).
    La ligne 2 et 3 sont inchangées (les droits étant inférieurs à celui défini dans la liste des droits).
    La ligne 4 n'est pas modifiée car l'id n'est pas présents dans la liste d'identifiants.
    J'espère avoir été clair.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Le problème est clair, par contre, comment se présentent vos "listes"

    s'agit-il de chaines de chaines de caractères ???

    Et si c'est le cas, d'ou proviennent les données, et dans quel contexte effectuez-vous la requete ? (est-ce une procédure stockées à laquelle vous spécifiez les listes, ou est-ce que vous "construisez" la requete directement depuis votre programme ?)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut
    Les listes ne sont pas des chaînes de caractères.
    Je construit la requête directement depuis mon programme.
    Je pourrais effectuer des boucles dans mon programme pour effectuer les updates, mais j'esperais le faire en une requête sql.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    re,


    Effectivement, tu peux faire cela en une seule requete

    inspire toi de ça pour faire ta requete dynamiquement dans ton programme :
    Code sql : 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
     
    declare @t table(id int, groupe char(2), iddroit int)
    insert into @t values (1 ,'g2', 4)
    insert into @t values (1, 'g4', 3)
    insert into @t values (2, 'g4', 1)
    insert into @t values (3, 'g2', 4)
     
     
    select * from @t
     
    UPDATE @t 
    SET iddroit = gr.iddroit
    FROM (VALUES
    	(1), 
    	(2)
    ) AS idents(id)
    CROSS JOIN (VALUES
    	('g2', 3),
    	('g4', 3)
    ) AS gr(groupe, iddroit)
    WHERE idents.id = [@t].id
    AND gr.groupe = [@t].groupe
    AND gr.iddroit < [@t].iddroit
     
    select * from @t

    il faut que tu soit en 2005 2008 au moins pour que cette syntaxe soit acceptée a cause des constructeurs de lignes valuées : VALUES(), (), (),...

    Si tu es dans une version antérieure, tu devra les remplacer par une série de SELECT ... UNION ALL SELECT ...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 1
    UNION ALL SELECT 2
    UNION ALL ...
    -- ET
    SELECT 'g2' , 3
    UNION ALL SELECT 'g4', 3
    UNION ALL ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 26
    Par défaut merci
    Merci beaucoup.

    Je vais essayer ceci

    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
    DECLARE @Données TABLE 
    (id INT,  gp INT,  rt INT) 
    INSERT INTO @Données (id,gp,rt) values (1, 2, 4),(1, 4, 3),(2,4,1),(3,2,4)
     
    DECLARE @Droits TABLE 
    (gp INT, rt INT) 
    INSERT INTO @Droits (gp,rt) values (2, 3),(4, 3)
     
    UPDATE @Données 
    SET rt = [@Droits].rt
    FROM @Droits
    WHERE [@Données].id in (1,2)
    AND [@Données].gp = [@Droits].gp
    AND [@Données].rt > [@Droits].rt
     
    SELECT * FROM @Données

Discussions similaires

  1. Update + SUM + Group BY
    Par laure07 dans le forum Langage SQL
    Réponses: 24
    Dernier message: 21/10/2020, 18h39
  2. Update par groupe
    Par AlphaMoody dans le forum DB2
    Réponses: 1
    Dernier message: 16/04/2015, 17h34
  3. LDAP recherhce utilisateur + droits + groupe
    Par Snyper dans le forum Général Java
    Réponses: 0
    Dernier message: 21/07/2012, 01h56
  4. update + sum + group by
    Par PhYx dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/06/2008, 15h44
  5. update avec group by
    Par slc dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2004, 13h44

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