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
Était-ce utile?

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)
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top