Existe-t-il un moyen de sélectionner une base de données à partir d'une variable?Existe-t-il un moyen de sélectionner une base de données à partir d'une variable?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Existe-t-il un moyen de sélectionner une base de données à partir d'une variable?Existe-t-il un moyen de sélectionner une base de données à partir d'une variable?
Declare @bob as varchar(50);
Set @bob = 'SweetDB';
GO
USE @bob
Malheureusement, non. Sauf si vous pouvez exécuter le reste de votre lot en tant que SQL dynamique.
En utilisant execute
pour exécuter dynamiquement SQL va changer le contexte de la portée de la déclaration execute
, mais ne laissera pas un effet durable sur la portée que vous exécutez l'instruction execute
à partir.
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 seront être différent (en supposant que vous n'êtes pas déjà dans SweetDB), puisque le premier select, exécuté à l'intérieur execute
s'exécute dans SweetDB, mais le second ne l'est pas.
declare @NewDB varchar(50)
set @NewDB = 'NewDB'
execute('use ' + @NewDB)
#TempTables se 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)
)
Selon la documentation (http://msdn.microsoft.com/en-us/library/ms188332.aspx), « Les changements dans le contexte de la dernière base de données jusqu'à ce que la fin de l'instruction EXECUTE. ", donc ce code est documenté comme ne donnant pas l'effet voulu. –