2011-02-15 87 views
0

我想創建一個腳本以從服務器中的多個數據庫獲取數據,然後我希望它繼續到下一個服務器並執行相同的操作。我已經創建了一個腳本來處理一臺服務器及其所有數據庫。該腳本對於所有服務器中的所有數據庫表都是相同的。通過服務器迭代的SQL Server腳本第2部分

我的問題是,我該如何讓腳本識別鏈接到當前服務器的鏈接服務器,並繼續從這些服務器獲取數據?有人可能知道隱藏的存儲過程或命令嗎?我基本上想要通過我的所有服務器運行下面的腳本。當它完成遍歷一臺服務器中的所有數據庫時,我希望它繼續到下一臺服務器並執行相同的操作。我將把所有的數據保存在一張表格中。

這裏是我的腳本下面,我想有過5個服務器上運行腳本,我現在有鏈接到我的服務器之一:

SET NOCOUNT ON DECLARE @DBNAME NVARCHAR(MAX) DECLARE @DBNAME1 NVARCHAR(MAX) DECLARE @varSQL NVARCHAR(MAX) 


DROP TABLE TEMPIMGCOUNTERSERVER3 CREATE TABLE TEMPIMGCOUNTERSERVER3 (DBname NVARCHAR(MAX), Images INT, FileSize INT, DBCreation DATETIME) 

DECLARE DBNAME CURSOR FAST_FORWARD FOR select name from sys.databases where [NAME] LIKE 'Z%' AND create_date between '2011-02-06' and '2011-02-12' ORDER BY [create_date] 

OPEN DBNAME 

FETCH NEXT FROM DBNAME INTO @DBname WHILE (@@FETCH_STATUS=0) BEGIN 

Set @varSQL='INSERT INTO TEMPIMGCOUNTERSERVER3 (DBNAME, IMAGES, FileSize, DBCreation) 
SELECT ''['[email protected]+']'', SUM(PGCOUNT), sum(filesize/1024/1024), sys.databases.CREATE_DATE 
    FROM SYS.DATABASES, ['[email protected]+'].dbo.tbldoc WHERE created between ''2011-02-06'' and ''2011-02-12'' 
    and sys.databases.name='''[email protected]+''' 
    GROUP BY sys.databases.NAME, sys.databases.CREATE_DATE' 
EXEC SP_EXECUTESQL @varSQL 

FETCH NEXT FROM DBNAME 
INTO @DBNAME 
END 

CLOSE DBNAME 
DEALLOCATE DBNAME 

INSERT TEMPIMGCOUNTERSERVER3 (DBNAME, IMAGES, FILESIZE) 
SELECT @@SERVERNAME + ' ' +'TOTAL IMAGES AND FILE SIZE', SUM(IMAGES), SUM(FILESIZE) FROM TEMPIMGCOUNTERSERVER3 

SELECT DBNAME, IMAGES, FILESIZE, convert(VARCHAR(10), 
DBCREATION, 101) AS DBCREATION FROM TEMPIMGCOUNTERSERVER3 
GROUP BY DBNAME, IMAGES, FILESIZE, convert(VARCHAR(10), DBCREATION, 101) 
HAVING SUM(IMAGES) is not null 
ORDER BY DBCREATION 

我應該再添光標?一些與此腳本:從master..sysservers其中srvname像「SQL%」

+0

如果您發佈代碼,XML或數據樣本,**請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕({})以精確地設置格式並對其進行語法突出顯示! – 2011-02-15 14:53:56

回答

0

選擇srvname我只想窩光標在鏈接的服務器上運行的另一個光標。請在srvproduct字段中等待「SQL Server」的位置過濾來自master..sysservers的服務器列表。如果該列表中有任何內容,則不希望將其置於不在條款中。然後,修改內部遊標以將查詢的服務器名稱添加到您的表格名稱中。