Est-il possible de sélectionner une base de données à partir d'une variable?
-
06-09-2019 - |
Question
Est-il possible de sélectionner une base de données à partir d'une variable?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
La solution
Malheureusement, non.
Sauf si vous pouvez exécuter le reste de votre lot comme SQL dynamique.
Utilisation execute
pour exécuter dynamiquement SQL va changer le contexte de la portée de la déclaration de execute
, mais ne laissera pas un effet durable sur la portée que vous exécutez l'instruction de execute
.
En d'autres termes, ceci:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db)
ne placeront pas la base de données actuelle en permanence, mais si vous avez modifié le code ci-dessus comme ceci:
DECLARE @db VARCHAR(100)
SET @db = 'SweetDB'
EXECUTE('use ' + @db + ';select * from sysobjects')
select * from sysobjects
Ensuite, le résultat de ces deux requêtes sera différent (en supposant que vous n'êtes pas dans SweetDB déjà), depuis la première sélection, exécutée à l'intérieur execute
est exécuté dans SweetDB, mais le second n'est pas.
Autres conseils
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#TempTables seront presist dans OGs
vous pouvez créer la table dans le premier lot, insérer / sélectionner les données que nécessaire ou que tout lot suivant.
voici quelques exemple de syntaxe:
CREATE TABLE #YourTableName
(
col1 int not null primary key identity(1,1)
,col2 varchar(10)
)