SQL is niet mijn specialiteit, maar geregeld moet ik scripts schrijven die SQL query's doen. Nu loop ik tegen volgende probleem aan. Gegeven de volgende SQL query (op een MS SCCM 2007 DB overigens):
Mijn probleem zit 'm in v_RA_System_SystemOUName.System_OU_Name0: die geeft niet de OU van het object weer maar de hele tree. Voor een gegeven machine X krijg ik het volgende terug (fictieve gegevens):
Ik wil enkel de laatste (of eigenlijk de 2e) terugkrijgen omdat ik het departement uit die string moet halen (in casu: SALES). Dat is geen probleem als ik maar één van de 5 resultaten terug zou krijgen (behalve de 1e).
Als dit een array zou zijn in .NET, dan zou ik gewoon v_RA_System_SystemOUName.System_OU_Name0[1] doen om de juiste informatie er uit te vissen. Hoe dit in SQL kan weet ik evenwel niet - ook Google is weinig behulpzaam omdat ik het probleem moeilijk in een juiste trefwoord kan samenvatten (bij gebrek aan kennis van SQL), een probleem dat zich ook stelde bij het kiezen van een titel van dit topic
Dit is ongetwijfeld een eitje voor de SAs hier. Ik dank jullie alvats om mij op het juiste spoor te zetten
Edit: In principe kan ik wel een oplossing vinden in mijn code, maar dat zou niet zo netjes zijn én qua performance ook een slechte keuze: ik trek met deze query immers 5x dezelfde data binnen. Te vermenigvuldigen met pakweg 25 000 en dat in een ForEach loop met nog eens zoveel data van een andere bron.
SQL:
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
| SELECT DISTINCT v_R_System.Netbios_Name0, v_R_System.managedBy0, v_R_System.User_Name0, v_R_System.AD_Site_Name0, v_GS_PC_BIOS.SerialNumber0, v_GS_COMPUTER_SYSTEM.Model0, v_RA_System_IPAddresses.IP_Addresses0, v_RA_System_SystemOUName.System_OU_Name0 FROM v_R_System INNER JOIN v_RA_System_SystemOUName ON v_RA_System_SystemOUName.ResourceId = v_R_System.ResourceId INNER JOIN v_GS_PC_BIOS ON v_GS_PC_BIOS.ResourceID = v_R_System.ResourceId INNER JOIN v_GS_COMPUTER_SYSTEM ON v_GS_COMPUTER_SYSTEM.ResourceID = v_R_System.ResourceId INNER JOIN v_RA_System_IPAddresses ON v_RA_System_IPAddresses.ResourceID = v_R_System.ResourceID WHERE -- Dit is een placeholder voor een variabele in het script waarin dit gebruikt zal worden v_GS_PC_BIOS.SerialNumber0 LIKE '%' AND -- Dit is om de IPv6 adressen er uit te filteren v_RA_System_IPAddresses.IP_Addresses0 NOT LIKE '%:%' ORDER BY v_R_System.Netbios_Name0 |
Mijn probleem zit 'm in v_RA_System_SystemOUName.System_OU_Name0: die geeft niet de OU van het object weer maar de hele tree. Voor een gegeven machine X krijg ik het volgende terug (fictieve gegevens):
code:
1
2
3
4
5
| CONTOSO.COM/_ACME CONTOSO.COM/_ACME/SALES CONTOSO.COM/_ACME/SALES/COMPUTERS CONTOSO.COM/_ACME/SALES/COMPUTERS/DESKTOPS CONTOSO.COM/_ACME/SALES/COMPUTERS/DESKTOPS/STANDARD |
Ik wil enkel de laatste (of eigenlijk de 2e) terugkrijgen omdat ik het departement uit die string moet halen (in casu: SALES). Dat is geen probleem als ik maar één van de 5 resultaten terug zou krijgen (behalve de 1e).
Als dit een array zou zijn in .NET, dan zou ik gewoon v_RA_System_SystemOUName.System_OU_Name0[1] doen om de juiste informatie er uit te vissen. Hoe dit in SQL kan weet ik evenwel niet - ook Google is weinig behulpzaam omdat ik het probleem moeilijk in een juiste trefwoord kan samenvatten (bij gebrek aan kennis van SQL), een probleem dat zich ook stelde bij het kiezen van een titel van dit topic
Dit is ongetwijfeld een eitje voor de SAs hier. Ik dank jullie alvats om mij op het juiste spoor te zetten
Edit: In principe kan ik wel een oplossing vinden in mijn code, maar dat zou niet zo netjes zijn én qua performance ook een slechte keuze: ik trek met deze query immers 5x dezelfde data binnen. Te vermenigvuldigen met pakweg 25 000 en dat in een ForEach loop met nog eens zoveel data van een andere bron.
[ Voor 6% gewijzigd door YellowOnline op 10-04-2013 13:21 ]
