1 votes

Erreur de requête SQL

J'essaie d'effectuer une requête sur un groupe de serveurs de réseau, mais je reçois une étrange erreur de syntaxe. La requête supérieure s'exécute avec succès, mais dès que l'option Ajouter/Supprimer des programmes est ajoutée, "L'identifiant multipartite "SYS.ResourceID" n'a pas pu être lié". En fin de compte, je veux pouvoir interroger un groupe d'ordinateurs et afficher la liste des programmes d'ajout et de suppression pour chacun d'eux.

Code de travail pour tirer le type de serveur, le service pack, etc :

SELECT DISTINCT SYS.Name, OPSYS.Caption0, OPSYS.CSDVersion0, OPSYS.InstallDate0,OPSYS.LastBootUpTime0
FROM v\_FullCollectionMembership SYS
JOIN v\_GS\_OPERATING\_SYSTEM OPSYS on SYS.ResourceID=OPSYS.ResourceID
WHERE SYS.CollectionID = @CollID
ORDER BY SYS.Name,OPSYS.Caption0

Ne fonctionne pas :

SELECT DISTINCT SYS.Name, OPSYS.Caption0, OPSYS.CSDVersion0, OPSYS.InstallDate0,OPSYS.LastBootUpTime0, ARP.DisplayName0, ARP.Version0
FROM v\_FullCollectionMembership SYS ,  v\_Add\_Remove\_Programs ARP
JOIN v\_GS\_OPERATING\_SYSTEM OPSYS on SYS.ResourceID=OPSYS.ResourceID
WHERE SYS.CollectionID = @CollID
ORDER BY SYS.Name,OPSYS.Caption0

0voto

Evan Anderson Points 140581

SMS 2003, hein ?

Je ne vois pas où vous faites la jonction avec la table v_Add_Remove_Programs (comme ARP). Vous allez devoir la nommer dans une jointure.

Totalement improvisé, ceci devrait fonctionner (mais probablement pas... sourire Je ne dispose pas de ce schéma pour l'interroger) :

SELECT DISTINCT SYS.Name, OPSYS.Caption0, OPSYS.CSDVersion0, OPSYS.InstallDate0,OPSYS.LastBootUpTime0, ARP.DisplayName0, ARP.Version0
FROM v_FullCollectionMembership SYS
INNER JOIN v_GS_OPERATING_SYSTEM OPSYS on SYS.ResourceID = OPSYS.ResourceID
INNER JOIN v_Add_Remove_Programs ARP on SYS.ResourceID = ARP.ResourceID
WHERE SYS.CollectionID = @CollID
ORDER BY SYS.Name,OPSYS.Caption0

0 votes

Cela fonctionne très bien - maintenant, existe-t-il un moyen de masquer les données redondantes (telles que le nom multiple, la version CSD, etc.) dans la requête ? Comme dans avoir un nom de serveur, puis les programmes installés.... et ensuite le nom du serveur suivant et ses programmes...

0 votes

Comme avec Evan, je ne connais pas le schéma, le "ORDER BY SYS.Name" devrait lister chaque système dans l'ordre, mais je sais que SQL ne suit pas toujours les directives ORDER BY. Si ce n'est pas le cas, votre meilleure chance est peut-être de mettre les données dans Excel ou OpenOffice et de les trier manuellement.

0 votes

Vous pouvez "cacher" les données "redondantes" en utilisant un moteur de rapports (Crystal, Access, Datavision, etc.) pour traiter les résultats de la requête. Il s'agit essentiellement d'avoir un rapport avec une section détaillée regroupée selon certains critères. Vous n'obtiendrez pas cela d'une requête SQL.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X