J'ai un processus qui implique l'exécution de diverses commandes entre plusieurs bases de données - cependant, lorsque j'utilise SQL dynamique pour changer de base de données avec 'use @var', il ne change pas réellement la base de données.
Exécuter ceci dans [test_db]:
declare @currentDB varchar(max)
declare @sql varchar(max)
set @currentDB = DB_NAME()
set @sql = 'use [' + @currentDB +']'
use master
exec(@sql)
select DB_NAME()
Renvoie [Master] comme nom de base de données actuel - si je mets en use [test_db]
tant que commande, plutôt que dynamiquement, alors il renvoie le nom correct.
Existe-t-il un moyen de le faire qui permute correctement entre les bases de données?
exec OtherDatabase.sys.sp_executesql N'select db_name()'
Cela fonctionne aussi.
la source
En apprenant du post précédent, je suis allé un peu plus loin et je me suis impressionné ...
la source