Sql-Server

使用動態 SQL 在數據庫之間切換

  • September 24, 2019

我有一個涉及在多個數據庫之間執行各種命令的過程 - 但是,當我使用動態 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這涵蓋了USESET語句以及在該子流程中創建的任何本地臨時表。**全域臨時表的創建將在子流程中繼續存在,對在子流程啟動之前存在的本地臨時表進行的修改以及對CONTEXT_INFO(我相信)的任何更改也將繼續存在。

所以不,您不能動態更改目前數據庫。如果您需要執行此類操作,您將需要在該動態 SQL 中執行依賴於新數據庫上下文的任何後續語句。

引用自:https://dba.stackexchange.com/questions/118729