Une seul requete pour plusieurs base

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Une seul requete pour plusieurs base

de guigui69 » Mer 2 Nov 2016 16:25

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
Super Contributeur
Super Contributeur
 
Messages: 215
Inscription: Jeu 5 Fév 2009 16:39

Re: Une seul requete pour plusieurs base

de romulus001 » Mer 2 Nov 2016 16:41

Bonjour, effectivement, c'est possible, vous pouvez également aller sur des bases de données sur différentes instances
Super Contributeur
Super Contributeur
 
Messages: 176
Inscription: Sam 28 Juin 2014 20:48

Re: Une seul requete pour plusieurs base

de OokieDookie » Ven 4 Nov 2016 16:27

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:
"L'expérience est le nom que chacun donne à ses erreurs." (O. Wilde)
Qualité et précision de la question conditionnent celles de la réponse. :roll:
Et si on gagnait TOUS du temps ? Menu "?", A propos de :wink:
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 1481
Inscription: Jeu 14 Fév 2008 13:50
Localisation: Paris


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité