2011-03-25 56 views
0

我在SQL Server中有多個數據庫。並且諸如「Database1」,「Database1_Tmp」,「Database2」,「Database2_Tmp」等的數據庫設計例如是「 和我的sql命令我想執行當前數據庫的命令和選定數據庫的tmp對上的一些命令。在SQL Server中運行生成的使用DB命令

我寫了一個SQL查詢,如下,但它給我一個錯誤

附近有語法錯誤@db_Blobname「。

如何寫一個命令到當前dB變化,運行命令

感謝

.......... 
---command for DatabaseX 
........................ 
--trying to change current DatabaseX to DatabaseX_Tmp to run command on 
    DECLARE @db_Blobname VARCHAR(255) 
    SET @db_Blobname = (SELECT DB_NAME()) 
    SET @db_Blobname = @db_Blobname+ '_Tmp' 
    PRINT @db_Blobname 
    USE @db_Blobname 
    GO 
............ 

回答

2

您可以使用execsp_executesql做你想做什麼。但要小心:僅將USE包裝在動態SQL中是不夠的。你必須在這個動態的sql調用中封裝你想在其他數據庫上完成的所有語句。 引用來自exec頁面:

數據庫上下文中的更改只會持續到EXECUTE語句結束。例如,在這個例子中,EXEC後,數據庫環境是主:

使用母版EXEC(「USE酒吧」)SELECT * FROM作者

所以,你的代碼看起來是這樣的,假設你有在你的數據庫中的表「富」:

DECLARE @db_Blobname VARCHAR(255) 
DECLARE @stmnt VARCHAR(8000) 
SET @db_Blobname = (SELECT DB_NAME()) 
SET @db_Blobname = @db_Blobname+ '_Tmp' 
SET @stmnt = 'USE '[email protected]_Blobname+'; SELECT * FROM foo' 
EXEC (@stmnt) 
GO 
+0

喂thnks你的答案..我已經厭倦了片段,但它給錯誤爲「無效的對象名稱SampleTable'」 ... – dankyy1 2011-03-25 08:21:46

+0

哪段?請發佈代碼。 – 2011-03-25 08:23:44

+0

這裏是我試過的代碼片段........ DECLARE @db_Blobname VARCHAR(255)SET @db_Blobname =(SELECT DB_NAME())SET @db_Blobname = @ db_Blobname +'_Tmp'PRINT @db_Blobname USE master EXEC('USE '+ @ db_Blobname)SELECT TOP 1 ID FROM SampleTable – dankyy1 2011-03-25 08:42:53

相關問題