Bonjour,

J'essaies d'écrire une requete SQL portant sur plusieurs bases de données différentes mais ayant toutes la même structure (générées par un outil d'audit de performances). J'ai donc écrit la requete suivante qui récupere les données de la base 1 :

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
SELECT 
	   AVG(avg_cpu_util) AS 'AVG CPU UTIL',
	   AVG(avg_mem_util) AS 'AVG MEM UTIL',
	   AVG(avg_disc_queue) AS 'AVG DISC QUEUE',
	   AVG(avg_disc_iops) AS 'AVG DISC IOPS',
	   AVG(avg_disc_transfert) AS 'AVG DISC TRANSFERT',
	   AVG(avg_net_util) AS 'AVG NET UTIL'
 
FROM 
	(SELECT (cpu_avg.percentage_processor_time * SUM(cpu.max_clock_speed))/100 avg_cpu_util
	 FROM dbo.processors cpu,dbo.performance_processor cpu_avg
	 WHERE cpu_avg.instance = '_Total'
	 GROUP BY cpu_avg.percentage_processor_time
	) as sub_cpu_avg,
	(SELECT mem_avg.committed_bytes / 1048576 avg_mem_util
	FROM dbo.performance_memory mem_avg
	) as sub_mem_avg,
	(SELECT disc_avg.avg_disk_queue_length avg_disc_queue, 
	        disc_avg.disk_transfers_per_sec avg_disc_iops,
	        (ISNULL(disc_avg.avg_disk_bytes_read / NULLIF (disc_avg.avg_disk_sec_read, 0), 0) + ISNULL(disc_avg.avg_disk_bytes_write / NULLIF (disc_avg.avg_disk_sec_write, 0), 0)) / 1048576 avg_disc_transfert
	FROM dbo.performance_disk disc_avg
	WHERE disc_avg.instance = N'_Total'
	) as sub_disc_avg,
	(SELECT net_avg.bytes_total_per_sec / 1024 avg_net_util
	FROM dbo.performance_network_interface net_avg
	WHERE net_avg.instance <> 'MS TCP Loopback interface'
	) as sub_net_avg
cette requette fonctionne et m'affiche bien les données souhaitées sur la premiere base, mais je bloque au niveau de la récupération des données de la base 2.
L'idéal pour moi serrait d'avoir un seul tableau de résultat avec deux lignes distinctes. J'ai pensé utiliser le UNION mais les métriques relevées ne sont pas les même donc celà posera probleme ...

Comment procederiez vous ?

En vous remerçiant.