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.
Les n° de ces dossiers correspond au nom de la base : 51320 = db51320
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
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
Merci d'avance pour votre aide
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
Partager