Saya memiliki proses yang melibatkan mengeksekusi berbagai perintah antara beberapa database - namun, ketika saya menggunakan SQL dinamis untuk mengubah DB dengan 'use @var', maka itu tidak benar-benar mengubah database.
Menjalankan ini di [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()
Mengembalikan [Master] sebagai nama basis data saat ini - jika saya menempatkan use [test_db]
sebagai perintah, bukan secara dinamis, maka ia mengembalikan nama yang benar.
Apakah ada cara untuk melakukan ini yang akan beralih dengan benar di antara basis data?
exec OtherDatabase.sys.sp_executesql N'select db_name()'
Ini juga berfungsi.
sumber
Belajar dari posting sebelumnya saya sedikit lebih dalam dan terkesan sendiri ...
sumber