Requête multiple database
Bonjour,
Je suis à la recherche d'une solution pour simplifier une requête permettant d'extraire des données de plusieurs bases se trouvant sur un même serveur Microsoft SQL 2012.
Je sélectionne des dossiers suivant un critère de nom ce qui donne environ 35 dossiers.
Code:
1 2 3
| select dos_nodossier, dos_libelle,nombase='db' + dos_nodossier from dbmaster.dbo.DOSSIER
where dos_libelle like'ws%' and dos_nontraite = '-'
order by dos_nodossier |
Les n° de ces dossiers correspond au nom de la base : 51320 = db51320
J'ai besoin ensuite d'utiliser ce nom de base pour faire une extraction de donnée sur chaque base issu de la sélection précédente @dbbase représentant le nom de base à traiter.
Code:
1 2 3 4 5 6 7 8
| select ecriture.e_journal,ecriture.e_general,generaux.g_libelle,ecriture.e_auxiliaire,ecriture.e_datecomptable,ecriture.e_refinterne,ecriture.e_libelle,ecriture.e_debit,ecriture.e_credit,ecriture.e_periode,dossier = @dossier,Nom_dossier = @dossierlibelle
from @dbbase.dbo.ecriture
inner join @dbbase.dbo.generaux on ecriture.e_general=generaux.g_general
WHERE ecriture.e_general like '512%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '3%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '401%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '411%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
order by ecriture.e_general,ecriture.e_datecomptable |
Ci-dessous la requête actuelle qui renvoi un code d'erreur au niveau de la table du dossier à sélectionner : from @dbbase.dbo.ecriture et @dbbase.dbo.generaux
Code:
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 31 32 33 34 35 36 37 38 39 40
| declare @dossier char (7), @dossierlibelle varchar (50), @dbbase NVARCHAR(128)
declare @debper int, @finper int
--set NOCOUNT ON
set @debper = 201710
set @finper = 201710
-- Sélection automatique des dossiers WS a traiter
declare dossiers_ws cursor for
select dos_nodossier, dos_libelle,nombase='db' + dos_nodossier from dbmaster.dbo.DOSSIER
where dos_libelle like'ws%' and dos_nontraite = '-'
order by dos_nodossier
open dossiers_ws;
fetch dossiers_ws into @dossier, @dossierlibelle, @dbbase;
-- Traitement
WHILE (@@FETCH_STATUS = 0)
BEGIN
select ecriture.e_journal,ecriture.e_general,generaux.g_libelle,ecriture.e_auxiliaire,ecriture.e_datecomptable,ecriture.e_refinterne,ecriture.e_libelle,ecriture.e_debit,ecriture.e_credit,ecriture.e_periode,dossier = @dossier,Nom_dossier = @dossierlibelle
from @dbbase.dbo.ecriture
inner join @dbbase.dbo.generaux on ecriture.e_general=generaux.g_general
WHERE ecriture.e_general like '512%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '3%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '401%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
or ecriture.e_general like '411%' and ECRITURE.E_PERIODE BETWEEN @debper and @finper
order by ecriture.e_general,ecriture.e_datecomptable
FETCH dossiers_ws into @dossier, @dossierlibelle, @dbbase;
END;
close dossiers_ws;
deallocate dossiers_ws;
GO |
Merci d'avance pour votre aide