Sql-Server
使用動態 SQL 在數據庫之間切換
我有一個涉及在多個數據庫之間執行各種命令的過程 - 但是,當我使用動態 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
/ )中進行的會話級更改會消失。sp_executesql
這涵蓋了USE
和SET
語句以及在該子流程中創建的任何本地臨時表。**全域臨時表的創建將在子流程中繼續存在,對在子流程啟動之前存在的本地臨時表進行的修改以及對CONTEXT_INFO
(我相信)的任何更改也將繼續存在。所以不,您不能動態更改目前數據庫。如果您需要執行此類操作,您將需要在該動態 SQL 中執行依賴於新數據庫上下文的任何後續語句。