Page 1 sur 1

Une seul requete pour plusieurs base

MessagePosté: Mer 2 Nov 2016 16:25
de guigui69
Bonjour à tous,

je dispose d'une requête SQL que je doit exécuter sur plusieurs BDD sur différente société compta

Voici la requête d'exemple:

Code: Tout sélectionner
SELECT .....
FROM [XXXX].[dbo].[F_ECRITUREC]
INNER JOIN F_COMPTEG on F_COMPTEG.CG_NUM=F_ECRITUREC.CG_NUM
WHERE JM_Date>= '20160101' and JM_Date<= '20161231'

[code]
Et donc je voudrais savoir si il est possible de faire en une seul requete pour  interroger tout les base en question exemple:

SELECT .... FROM [[B]SOCIETE1[/B]].[dbo].[F_ECRITUREC] INNER JOIN F_COMPTEG on F_COMPTEG.CG_NUM=F_ECRITUREC.CG_NUM  WHERE JM_Date>= '20160101' and JM_Date<= '20161231'
UNION
SELECT .... FROM [[B]SOCIETE3[/B]].[dbo].[F_ECRITUREC] INNER JOIN F_COMPTEG on F_COMPTEG.CG_NUM=F_ECRITUREC.CG_NUM  WHERE JM_Date>= '20160101' and JM_Date<= '20161231'
UNION
SELECT .... FROM [[B]SOCIETE2[/B]].[dbo].[F_ECRITUREC] INNER JOIN F_COMPTEG on F_COMPTEG.CG_NUM=F_ECRITUREC.CG_NUM  WHERE JM_Date>= '20160101' and JM_Date<= '20161231'
UNION


Est-ce possible de réaliser ce type de requete ?

Merci d'avance pour votre aide et vos explications

guigui69

Re: Une seul requete pour plusieurs base

MessagePosté: Mer 2 Nov 2016 16:41
de romulus001
Bonjour, effectivement, c'est possible, vous pouvez également aller sur des bases de données sur différentes instances

Re: Une seul requete pour plusieurs base

MessagePosté: Ven 4 Nov 2016 16:27
de OokieDookie
Bonjour,

Il faudrait utiliser UNION ALL plutôt que UNION.
Pour ce type de requêtes, préfixer systématiquement toutes les tables utilisées avec le nom de la base et du schéma.
Définir un nom pour chaque colonne appelée dans la clause SELECT.
Je conseille également de poser des alias courts sur les noms de table pour améliorer la lisibilité.

Ce qui donne donc par exemple :

Code: Tout sélectionner
SELECT 'SOCIETE1' AS Societe, EC.Ec_Jour, EC.JO_Num, PCG.CG_Num, ... FROM SOCIETE1.dbo.F_ECRITUREC EC INNER JOIN SOCIETE1.dbo.F_COMPTEG PCG ON EC.CG_NUM = PCG.CG_NUM  WHERE EC.JM_Date>= '20160101' and EC.JM_Date<= '20161231'
UNION ALL
SELECT 'SOCIETE2' AS Societe, EC.Ec_Jour, EC.JO_Num, PCG.CG_Num, ... FROM SOCIETE2.dbo.F_ECRITUREC EC INNER JOIN SOCIETE2.dbo.F_COMPTEG PCG ON EC.CG_NUM = PCG.CG_NUM  WHERE EC.JM_Date>= '20160101' and EC.JM_Date<= '20161231'
UNION ALL
...


HTH,

PS : Méfiez-vous de JM_Date si vous devez envisager d'autres périodes que le mois... Sans EC_Jour pas de date d'écriture :wink: