morm91
Messages postés7Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention29 juillet 2008
-
27 mai 2008 à 17:58
morm91
Messages postés7Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention29 juillet 2008
-
28 mai 2008 à 10:07
Bonjour (ou bonsoir) a tous.
Alors je vous expose mon probleme. Je travaille sur un projet réalisé en ASP.NET dans lequel je fais appel à un grand nombre de procédures stockées.
Le probleme est que ces procédures doivent pouvoir être utilisés sur plusieurs base de données (celle de test, et celle en production).
J'aurai donc voulu pouvoir passer le nom de ma base de donnée comme paramêtre de ma procédure stockée, mais celle ci étant déclaré en tant que string, il est impossible de l'utiliser derriere : j'aurai voulu pouvoir faire qqchose du genre " select champ1, champ2 from @DB..table1 " ou @DB est le parametre contenant le nom de ma base de données.
Je ne suis pas du genre a posté un probleme des que je le rencontre, mais au bout de 2 heures de recherches intensives se révélant infructueuse, je me tourne vers vous :)
Je suis donc ouvert a toute proposition me permettant de corriger ou contourner ce probleme, sachant que je suis sensé publier le site demain...
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 27 mai 2008 à 22:09
Salut,
Je te donne d'abord ce qui me passe par la tête au niveau SQL, et apres la solution SIMPLE !
Au niveau SQL, il n'y a qu'une seule solution à ton problème,
passer par une requete texte :
declare @base varchar(35)
set @base = 'MA_BASE'
declare @sql varchar(500)
set @sql = 'select champ1, champ2 from ' + @base + '..table1'
execute (@sql)
-- De même , si tu dois utiliser des variables declarées en dehors de la requête texte,
-- c'est possible, il faut simplement la caster en sysname pour pointer vers sa réference et pas sur sa valeur :
-- par exemple affecter une valeur à une variable :
declare @sql varchar(100)
declare @ma_var int
set @sql 'set ' + cast(@ma_var as sysname) + ' 10 '
exec(@sql)
select @ma_var -- affiche 10
Maintenant la solution SIMPLE, tu passe un entier à tes procédures :
1 = base 1
2 = base 2
Et dans les procédures stockées :
if @base = 1
select* from base1..table1
else
select * from base 2..table2
morm91
Messages postés7Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention29 juillet 2008 28 mai 2008 à 09:44
Merci tout d'abord pour la réponse :)
Donc comme je m'en doutais, il va falloir passer par une requete texte. C'est ce que j'avais commencé à faire, mais je ne savais pas que l'on pouvait les cast en sysname, ce qui faisais que je devais mettre toute ma proc dans la même string. Je vais essayer en faisant ca, ca devrait marcher :).
En revanche la solution simple ne pourra pas m'aider, mes procédures sont trop grandes, ca serait une vrai usine à gaz.
En tout cas je te remercie et te tiendrai au courant de l'avancement de mon problême :)
morm91
Messages postés7Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention29 juillet 2008 28 mai 2008 à 10:07
Permier problème :s
En fait j'ai l'impression que quand je fais set @sql 'set ' + cast(@ma_var as sysname) + ' 10 ', ma variable @sql ne contient rien, comme si le cast renvoyait null.
Je ne sais pas si le problème vient de moi (j'utilse SQL Server 2005), ou si je n'ai aps tout compris sur l'utilisation du sysname.