Welcome to MSDN Blogs Sign in | Join | Help

Blog de David Sebban [MSFT]

Windows Vista, Windows 7, MDT 2008, MDT 2010 etc :)

News

  • Locations of visitors to this page

    Dialoguez en direct avec moi!

    Cliquez sur le bouton ci dessous
     

Base de données MDT : Comment réorganiser les résultats de requêtes

Bonjour à tous,

un consultant intervenant avec moi chez un client m’a soumis une requête interressante concernant l’ordre dans lequel était organisé les résultats des requêtes faits à la base MDT.

A premiere vue, pas de quoi sauter au plafond mais en y regardant bien, la demande portait sur l’ordre d’installation de packages SCCM disséminés dans plusieurs endroits.

Voici un exemple concret :

je crée un objet ordintateur dans la base MDT et je lui associe 2 packages comme ceci

image

je crée ensuite 3 rôles contenant chacun deux packages comme ceci

image

image

et

image

je les associe dans l’ordre suivant sur mon ordinateur :

image

Enfin, je configure mon customsettings.ini pour aller requêter d’abord les “computer settings” puis les “computer packages”, les “computer roles” et enfin les “role packages” dans cet ordre comme ceci

[Settings]
Priority=CSettings, CPackages, CRoles, RPackages, Default

Je lance un ZTIGather et je m’attends à obtenir les packages dans l’ordre que j’ai spécifié :

  1. TST00001:Program
  2. TST00002:Program
  3. TST00001:XX – Program
  4. TST00002:XX – Program
  5. TST00001:ZZ – Program
  6. TST00002:ZZ – Program
  7. TST00001:YY – Program
  8. TST00002:YY - Program

or j’obtiens le résultat suivant :

image

La raison est simple, la requête effectuée par le ZTIGather est la suivante :

SELECT * FROM RolePackages WHERE ROLE IN ('XX - Application 3', 'YY - Application 2', 'ZZ - Application 1') ORDER BY Sequence

image

Il apparait clairement que la notion de séquence n’est pas bonne puise qu’elle est propre à chaque rôle !!

En fait, c’est tout a fait logique, la bonne requête aurait du être la suivante :

SELECT        rp.Role, rp.Type, rp.ID, rp.Sequence, rp.Packages, cr.Sequence AS RoleSequence
FROM            RolePackages AS rp INNER JOIN
                         ComputerRoles AS cr ON rp.Role = cr.Role
WHERE        (rp.Role IN ('XX - Application 3', 'YY - Application 2', 'ZZ - Application 1'))
ORDER BY RoleSequence, rp.Sequence

image

De manière à obtenir les packages de chaque role, mais également dans l’ordre des roles affectés  à la machine.

La bonne solution est donc de créer une nouvelle vue ou une procédure stockée pour répondre à ce type de besoins/

A vos éditeurs SQL ! :)

Posted: Tuesday, October 20, 2009 3:16 PM by dsebban

Comments

No Comments

Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker