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 :

Transformer un code SQL en Vue dans SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut Transformer un code SQL en Vue dans SQL
    Bonjour, tout d'abord je tiens à vous dire qu'il s'agit de mon premier post. J'espère que je vais être assez clair et pas à coté de la plaque .

    J'ai cherché le moyen sur du SQL de faire une vue sur les utilisateurs d'un groupe AD.

    J'ai trouvé en cherchant le code ci-dessous qui fonctionne, mais je n'arrive pas à le transformer afin de pouvoir créer une vue.

    C'est peut-être très simple pour vous mais moi je débute en SQL et je pense y avoir passé déjà beaucoup de temps.

    J'espère que vous pourrez m'aider.

    Merci d'avance.

    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
    DECLARE @group NVARCHAR(128) = 'MonGroupe'
    DECLARE @DC1 NVARCHAR(128) = 'MonDomaine'
    DECLARE @DC2 NVARCHAR(128) = 'local'
     
    DECLARE @SQL NVARCHAR(MAX)
    DECLARE @group_dn NVARCHAR(512)
    DECLARE @result TABLE(name NVARCHAR(512))
     
    SET @SQL = 
    'SELECT distinguishedName
    FROM OPENQUERY
    (ADSI,''SELECT cn, distinguishedName, dc
    FROM ''''LDAP://DC=' + @DC1 + ',DC=' + @DC2 + '''''
    WHERE objectCategory = ''''group'''' AND cn = ''''' + @group + ''''''')'
     
    --PRINT @SQL
    INSERT @result(name)
    EXEC sp_executesql @SQL
    SELECT @group_dn = name FROM @result
     
    SET @SQL =
    'SELECT *
    FROM OPENQUERY (ADSI, ''<LDAP://' + @DC1 + '.' + @DC2 + '>;
    (&(objectCategory=person)(memberOf:1.2.840.113556.1.4.1941:=' + @group_dn + '));
    cn, sAMAccountName, mail,adspath, distinguishedName;subtree'')
    ORDER BY cn;'
     
    --PRINT @SQL
    EXEC sp_executesql @SQL

  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,


    une vue doit contenir une requête. Là, vous avez du code TSQL avec déclaration de variables et appel de procédures stockées...

    Ce code peut être mis dans une procédure stockée, mais pas dans une vue.

    Pouvez-vous préciser le besoin/contexte, afin que l'on puisse trouver des alternatives ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Bonjour aieeeuuuuu,

    Merci de répondre aussi vite.

    J'ai besoin d'avoir différentes vues avec à l'intérieur les personnes appartenant à différents groupes AD.
    Par exemple une vue dbo.Groupe_ADV dans laquelle se trouve toutes les ADV. Le groupe sur l'AD ADV existe.
    En effet je vais utiliser ces vues dans un logiciels tiers de GEIDE afin de diriger des Workflows.

    Le code que j'ai mis me remonte effectivement les utilisateurs du groupe que je veux en remplacent 'MonGroupe' par 'ADV' par exemple.
    Je pensais donc qu'il était possible de transformer ce code en remplaçant les variables par des infos en dur afin d'obtenir ce que je souhaite .

    Ai-je été clair ou mes explications ne sont pas assez précise?

    Pour info j'ai déjà créé une vue qui me remonte tous les utilisateurs de l'AD et une autre qui me remonte tous les groupes de l'AD.

    Mariano

  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
    Si vous avez déjà pu créer des vues avec tous les utilisateurs, pourquoi ne pas faire de même pour les vues par groupe ?
    il faudra mettre en dur le nom des groupes (openquery n'accepte pas les variables comme argument de requête),mais vous pouvez procéder de la même manière.

    a moins que votre difficulté soit pour créer dynamiquement ces vues ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour,


    une vue doit contenir une requête. Là, vous avez du code TSQL avec déclaration de variables et appel de procédures stockées...

    Ce code peut être mis dans une procédure stockée, mais pas dans une vue….
    Ou bien une UDF table en ligne, qui est une vue paramétrique au sens strict du terme (on peut même y faire des INSERT, UPDATE, DELETE….)

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre à l'essai
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Bonjour à tous,

    Comme j'ai pu vous le dire dans un message précédent, je suis un novice en SQL et si j'ai pu créer des requêtes sur l'AD pour remonter les utilisateurs et les groupes c'est avec beaucoup de temps et de recherches sur internet.

    Par contre, je n'ai pas réussi à réaliser une vue qui me remonte les utilisateurs d'un groupe de sécurité de l'AD.

    La seule chose que j'ai réussi à trouver sur internet et qui fonctionne c'est le code que je vous ai transmis dans un message précédent.

    Est-il possible de transformer ce code afin de créer une vue qui me permette de faire ce que je souhaite (et si oui pouvez-vous m'aider s'il vous plait) ou pouvez-vous me fournir un code SQL qui me permette de créer mes vues?

    @SQLPro : Dsl mais je ne comprends pas du tout votre réponse.

  7. #7
    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
    comme je le disais, je ne vois pas trop ou vous voulez en venir, et une petite description du contexte ne serait pas inutile.

    Vous ne pouvez pas mettre de code TSQL dns une vue. Si vous voulez une vue par groupe, il faudra les créer spécifiquement (à la main, mais si vous avez la liste des groupe, vous pouvez faire une procédure qui va créer les vues...)

    Par exemple, pour obtenir les utilisateurs du groupe "MonGroupeAD"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    CREATE VIEW V_Utilisateur_MonGroupeAD
    AS
    SELECT *
    FROM OPENQUERY (ADSI, '<LDAP://MonGroupe.MonDomaine>;
    (&(objectCategory=person)(memberOf:1.2.840.113556.1.4.1941:=MonGroupeAD));
    cn, sAMAccountName, mail,adspath, distinguishedName;subtree')
    Attention, c'est un exemple non testé repris depuis votre code afin d'illustrer ce que je dis plus haut.

    En alternative, si vous avez créé une vue reprenant tous les utilisateurs et leur groupe, vous pouvez simplement filtrer sur cette vue pour créer vos vues par groupe. Cependant, je pense qu'avec cette méthode, tous les utilisateurs seront remontés systématiquement, puis filtré coté serveur SQL, ce qui pourrait charger inutilement l'AD, c'est donc a tester/vérifier... et voir en fonction du besoin


    enfin, une autre solution serait de synchroniser régulièrement une table locale contenant les utilisateurs et leur groupe... là encore, tout dépend du contexte et du besoin

  8. #8
    Membre à l'essai
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Août 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier

    Informations forums :
    Inscription : Août 2015
    Messages : 5
    Par défaut
    Bonjour ,

    Vous avez bien compris mon besoin avec le code que vous avez fourni.
    Je cherche a créer une vue par groupe AD dont j'ai besoin sans aucune variable à l'intérieur.

    J'ai essayé de mettre en place votre code mais cela me retourne une erreur.

    Msg 7321, Niveau 16, État 2, Procédure V_Utilisateur_MonGroupeAD, Ligne 3 [Ligne de départ du lot 0]
    Une erreur s'est produite lors de la préparation de l'exécution de la requête "<LDAP://MonGroupe.MonDomaine>;
    (&(objectCategory=person)(memberOf:1.2.840.113556.1.4.1941:=MonGroupe));
    cn, sAMAccountName, mail,adspath, distinguishedName;subtree" sur le fournisseur OLE DB "ADSDSOObject" du serveur lié "ADSI".
    Pour l'alternative, j'ai effectivement 2 autres vues mais avec rien en commun qui me permette de les filtrer:
    Ma première vue contient tous les utilisateurs de l'AD et ma deuxième tous les groupes de l'AD : Je n'ai rien en commun dans ces 2 vues.

    Je ne sais pas comment expliquer mieux mon besoin. Je pense que vous l'avez compris avec la piste que vous m'avez fourni hier.
    Je pensai que ce code était "basique" mais j'ai l'impression que non

    Je vous remercie encore pour le temps que vous passez à me répondre et à essayer de m'aider.

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

Discussions similaires

  1. copier code sql dans une vue vers sql querry
    Par thered dans le forum Bases de données
    Réponses: 1
    Dernier message: 04/07/2009, 16h45
  2. Order by, top(100) Percent et vue dans SQL server 2005
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 30/04/2009, 16h33
  3. [Oracle 9i] export ASCII du code SQL d'une vue
    Par milox dans le forum Oracle
    Réponses: 3
    Dernier message: 26/03/2007, 14h43
  4. Utiliser du code SQL dans VBA
    Par a2line dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 30/05/2006, 14h53
  5. [9iR2][PL/SQL] Comment créer une vue dans un package ?
    Par mainecoon dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2006, 08h10

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