2013-03-29 34 views
1

我正在使用SQL Server 2008 R2。我有不同的five databases on the same server.tables and stored procedure schema of all of them are the samedata are different正如我指出他們到不同的網站。現在,我想創建一個每天晚上9點30分運行的sql job。並從數據庫表中獲取數據並將其存儲到臨時表中。還有一個將臨時表的數據寫入LOG文件的sql作業。創建爲同一服務器上的不同數據庫運行的SQL作業

我爲此創建了two different stored procedures - 其中一個讀取數據,其他讀取數據,另外兩個對每個數據庫都正常工作。

但問題是,在SQL服務器代理中,我不想爲每個獲取存儲過程名稱並執行它的數據庫創建2個SQL作業(共10個SQL作業)。相反,我想創建ONLY TWO SQL JOBS。一個將執行存儲過程以將數據提取到臨時表中,另一個將在第一次完成後執行,並將數據寫入服務器中每個數據庫的安全目錄的日誌文件中。

因爲我在所有五個數據庫中都有相同的存儲過程名稱和表名稱,有可能嗎?

+1

您是否嘗試過堆疊sprocs?這是創建一個叫其他所有的sproc?如'EXEC sproc1; EXEC sproc2;' –

+0

你的意思是說我必須創建一個調用所有不同數據庫的存儲過程的存儲過程? – Dev

+1

是的,確切地說。我不確定這是唯一的解決方案,但是我過去曾經使用它。 –

回答

1

我的suggession是創建一個或兩個作業,並使用動態sql來運行sp的循環。您可以通過exec [Database1]。[dbo] .usp_procedurename @ parametr1運行另一個數據庫中可用的sp。

0

我相信sp_MSforeachdb會解決你的目的。將它與If子句配對以選擇/忽略某些數據庫。

DECLARE @command varchar(1000) 

SELECT @command = 'IF ''?'' IN(''myDB1'', ''myDB2'', ''myDB3'') BEGIN USE ? Select db_Name() END' 

--Print @command 

EXEC sp_MSforeachdb @command 
+0

這種解決方案是優雅的。我們如何使用'Select db_Name()'命令作爲單獨的變量並將其附加到@command變量中? –

相關問題