Tengo un proceso que implica ejecutar varios comandos entre varias bases de datos; sin embargo, cuando uso SQL dinámico para cambiar la base de datos con 'use @var', entonces en realidad no cambia la base de datos.
Ejecutando esto en [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()
Devuelve [Maestro] como el nombre de la base de datos actual: si pongo use [test_db]
como comando, en lugar de dinámicamente, devuelve el nombre correcto.
¿Hay alguna manera de hacer esto que cambie correctamente entre bases de datos?
exec OtherDatabase.sys.sp_executesql N'select db_name()'
Esto tambien funciona.
fuente
Al aprender de la publicación anterior, fui un poco más profundo y me impresioné ...
fuente