Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

USE dynamique

4 réponses
Avatar
VUILLERMET Jacques
En T-SQL, comment faire pour avoir un équivalent de :

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
USE @MaBase

?

Jacques.

4 réponses

Avatar
Nicolas LETULLIER
Pour autant que je sache, il n'est pas possible de changer dynamiquement de
base de données en cours dans un batch.

Tu pourrais faire un

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
EXEC('USE ' + @MaBase)

mais dans ce cas, le USE n'est effectif que dans le contexte du EXEC, donc
dès la fin de celui-ci, tu reviens à ta base d'origine.

La solution serait alors de créer une procédure stockée dans chaque base de
destination, ou mieux, dans la base master commençant par "sp_" (du coup,
accessible à partir de chaque base), et l'invoquer également dans le EXEC

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
EXEC('USE ' + @MaBase + ' EXEC sp_taprocedure)

Nicolas.



"VUILLERMET Jacques" a écrit dans le message de
news:
En T-SQL, comment faire pour avoir un équivalent de :

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
USE @MaBase

?

Jacques.




Avatar
VUILLERMET Jacques
C'est bien ce que je pensais...

Jacques.


"Nicolas LETULLIER" a écrit dans le
message de news: #
Pour autant que je sache, il n'est pas possible de changer dynamiquement


de
base de données en cours dans un batch.

Tu pourrais faire un

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
EXEC('USE ' + @MaBase)

mais dans ce cas, le USE n'est effectif que dans le contexte du EXEC, donc
dès la fin de celui-ci, tu reviens à ta base d'origine.

La solution serait alors de créer une procédure stockée dans chaque base


de
destination, ou mieux, dans la base master commençant par "sp_" (du coup,
accessible à partir de chaque base), et l'invoquer également dans le EXEC

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
EXEC('USE ' + @MaBase + ' EXEC sp_taprocedure)

Nicolas.



"VUILLERMET Jacques" a écrit dans le message de
news:
> En T-SQL, comment faire pour avoir un équivalent de :
>
> DECLARE @MaBase varchar(100)
> SET @MaBase = '...'
> USE @MaBase
>
> ?
>
> Jacques.
>
>




Avatar
Steve Kass
Jacques,

Pour choisir une bd selon la valeur de @MaBase:

if @MaBase = 'bd1'
use bd1
else if @MaBase = 'bd2'
use bd2
-- et cetera

SK

VUILLERMET Jacques wrote:

En T-SQL, comment faire pour avoir un équivalent de :

DECLARE @MaBase varchar(100)
SET @MaBase = '...'
USE @MaBase

?

Jacques.






Avatar
VUILLERMET Jacques
L'idée est bonne, dans le sens où il existe un certain dynamisme.

Mais cela suppose de connaître à l'avance la liste exhaustive des valeurs
possibles.

Il semble que l'on ne pourra pas mieux faire.

Jacques.


"Steve Kass" a écrit dans le message de news:

Jacques,

Pour choisir une bd selon la valeur de @MaBase:

if @MaBase = 'bd1'
use bd1
else if @MaBase = 'bd2'
use bd2
-- et cetera

SK

VUILLERMET Jacques wrote:

>En T-SQL, comment faire pour avoir un équivalent de :
>
>DECLARE @MaBase varchar(100)
>SET @MaBase = '...'
>USE @MaBase
>
>?
>
>Jacques.
>
>
>
>