Я пытаюсь создать сценарий для получения данных из нескольких баз данных на сервере, а затем я хочу, чтобы он продолжал на следующий сервер и делал то же самое. Я уже создал скрипт для работы с одним сервером и всеми его базами данных. Скрипт одинаков для всех баз данных, таблиц на всех серверах.
Мой вопрос: как мне заставить скрипт распознавать связанные серверы, которые я связал с моим текущим сервером, и продолжать получать данные с этих серверов? Есть ли скрытая хранимая процедура или команда, которую кто-то может знать? Я хочу запустить приведенный ниже скрипт на всех моих серверах. Когда он завершит итерацию по всем базам данных на одном сервере, я хочу перейти на следующий сервер и сделать то же самое. Я собираюсь сохранить все данные в таблице.
Вот мой скрипт ниже, я хочу, чтобы скрипт проходил через 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 ''['+@DBNAME+']'', SUM(PGCOUNT), sum(filesize/1024/1024), sys.databases.CREATE_DATE
FROM SYS.DATABASES, ['+@DBNAME+'].dbo.tbldoc WHERE created between ''2011-02-06'' and ''2011-02-12''
and sys.databases.name='''+@DBNAME+'''
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
Должен ли я добавить еще один курсор? Что-то с этим скриптом:
выберите имя srvname из master..sysservers, где имя srvname подобно 'sql%'