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 :

Récupération des membres de groupes AD via requête LDAP et commande EXEC [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 72
    Points
    72
    Par défaut Récupération des membres de groupes AD via requête LDAP et commande EXEC
    Bonjour

    Je rencontre un problème lors de la récupération des membres de groupes AD via requête LDAP et commande EXEC.

    Je suis avec SQL Server 2008 et j'ai créé une procédure stockée qui récupère tous mes groupes AD ainsi que leurs membres.

    Après avoir récupérer tous les groupes sans problèmes, je dois passer par des requêtes dynamiques pour obtenir les membres.
    Voici le code:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    declare @ResteATraite 		int
    declare @AdsPath			nvarchar(600)
    declare @AdsPathReduit		nvarchar(600)
    declare @Associat_Groupe 	nvarchar(100)
    declare @Requete			nvarchar(4000)
    declare	@DebRequeteInsert	nvarchar(2000)
    declare	@DebRequete			nvarchar(2000)
    declare	@Clause				nvarchar(2000)
    declare	@ClauseRestric		nvarchar(2000)
    declare @NbLignes			int
     
    set @DebRequeteInsert='INSERT INTO Tempo_ComptesGroupes (Associat_Login,Associat_Groupe) '
     
    SELECT  @ResteATraite=count(*) FROM dbo.Tempo_GroupesNT WHERE Traite='N'
     
    --boucle pour chaque groupe
    While (@ResteATraite>0)
    begin
    SELECT TOP 1 @AdsPath=AdsPath , @Associat_Groupe=Groupe FROM dbo.Tempo_GroupesNT WHERE Traite='N' 
    SET @AdsPathReduit= substring(@AdsPath,8,len(@AdsPath)) -- on supprime LDAP://
     
    set @DebRequete='SELECT samAccountName, ''' + replace(@Associat_Groupe,char(39), char(39)+char(39)) + '''
    FROM OPENQUERY(ServeurLieAD,
    ''SELECT samAccountName
    FROM ''''LDAP://DC=....,DC=fr'''' '
    set @Clause=' WHERE memberOf='''''  + replace(@AdsPathReduit,char(39), char(39)+char(39)+char(39)+char(39)) + ''''' '
     
    set @Requete= @DebRequeteInsert + @DebRequete + @Clause + @ClauseRestric + ' '')'
     
    --print @Requete
    execute (@Requete)
     
    -- groupe traite
    UPDATE dbo.Tempo_GroupesNT SET Traite='O' WHERE Traite='N' and AdsPath=@AdsPath
     
    SELECT  @ResteATraite=count(*) FROM dbo.Tempo_GroupesNT WHERE Traite='N'
    end
    Normalement cela bien fonctionner.
    Par contre il me semble y avoir des trous. Je veux donc faire des investigations.

    Cette procédure est lancée journalièrement par mon agent SQL.
    L'historique me dit qu'elle s'est bien déroulée, mais je vois dans le détails (historique de la tâche) toutes les requêtes (tronqué évidement car trop nombreuses).
    Lorsque je lance directement le traitement (depuis sql Server Management studio), j'obtiens à l'écran tous les résultats des insert select, comme si je ne faisais pas d'insert et à un moment je plante Management studio (trop de fenêtres).

    Comment empêcher ces "retours" d'informations ?
    J'ai déja SET NOCOUNT ON, mais évidement pas suffisant.

    J'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute (@Requete) WITH RESULT SETS NONE
    mais studio tique sur le SETS ?!

    Merci pour vos conseils

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 72
    Points
    72
    Par défaut Solution trouvée par moi-même
    En fait le code joint était bon (recopie partielle de celui réellement utilisé).

    En fait, les groupes pouvant contenir plus de 1000 membres, limite max à partir de laquelle il n'y a plus de retour (erreur) j'avais fait un découpage.

    Et mon code oubliait de rajouter des UNION.
    C'est maintenant corrigé.
    Et je n'ai plus les retours intempestifs que je signalais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    set @ClauseRestric=' and samAccountName < ''''H'''' '
    set @Requete= @DebRequeteInsert + @DebRequete + @Clause + @ClauseRestric + ' '')'
     
    set @ClauseRestric=' and samAccountName >= ''''H'''' and samAccountName < ''''Q'''' '
    set @Requete= @Requete + char(10) + 'UNION ' + char(10) + @DebRequete + @Clause + @ClauseRestric + ' '')'
     
    set @ClauseRestric=' and samAccountName >= ''''Q'''' '
    set @Requete= @Requete + char(10) + 'UNION ' + char(10) + @DebRequete + @Clause + @ClauseRestric + ' '')'
    --print @Requete
    execute (@Requete)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/05/2014, 11h59
  2. [Toutes versions] Récupération des groupes (favoris) et Requêtes associées
    Par Dr Byby'San dans le forum VBA Access
    Réponses: 6
    Dernier message: 13/08/2012, 22h22
  3. Récupération des membres d'un groupe
    Par Zhamy dans le forum C#
    Réponses: 1
    Dernier message: 30/04/2010, 17h38
  4. Réponses: 1
    Dernier message: 23/04/2009, 08h59
  5. Récupération des paramètres d'une requête
    Par TomPad dans le forum Access
    Réponses: 10
    Dernier message: 16/06/2005, 15h11

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