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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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