У меня есть процесс, который включает в себя выполнение различных команд между несколькими базами данных - однако, когда я использую динамический SQL для изменения БД с помощью 'use @var', тогда он фактически не меняет базу данных.
Выполнение этого в [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()
Возвращает [Master] в качестве текущего имени базы данных - если я поставлю use [test_db]
в качестве команды, а не динамически, то он вернет правильное имя.
Есть ли способ сделать это, который будет правильно переключаться между базами данных?
exec OtherDatabase.sys.sp_executesql N'select db_name()'
Это тоже работает.
источник
Извлекая уроки из предыдущего поста, я пошел немного глубже и впечатлил себя ...
источник