在 SQL Server 的存儲過程或觸發器中,無法直接使用 USE database_name 切換數據庫上下文,這是許多開發者遇到的常見限制。雖然可以通過 [database].[schema].[table] 的三部分命名來跨庫訪問對象,但某些系統預存過程(如 sp_adduser)必須在當前數據庫上下文中執行,這時就需要變通方案。
利用 EXECUTE(或簡寫 EXEC) 執行動態 SQL 字串,在該批次中包含 USE 與後續必須在該庫執行的語句。關鍵在於:數據庫上下文的變更僅在該 EXEC 批次內有效,因此必須將切換庫與業務邏輯放在同一個動態批次中。
CREATE PROCEDURE cs
AS
BEGIN
EXEC('USE sjdbmis; SELECT plucode FROM txtplu')
END
GO
CREATE PROCEDURE cs
AS
BEGIN
EXEC('USE sjdbmis; EXEC sp_adduser ''test''')
END
GO
''test'')。sp_executesql 執行,便於參數化與維護。掌握此技巧,即可在存儲過程與觸發器中靈活跨庫操作,突破 USE 的限制。