SQL Server 的預存程序與觸發器內部不允許使用 USE database 切換資料庫上下文,但某些系統預存程序(如 sp_adduser)必須在特定資料庫執行。
使用 EXEC() 或 EXECUTE() 包裹需切換資料庫的語句,資料庫上下文僅在該動態批次內有效。
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 參數化,提升安全與計畫重用。若頻繁跨庫操作,考慮:
database.schema.object 直接存取。