首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于遍历服务器的SQL Server脚本第2部分

用于遍历服务器的SQL Server脚本第2部分
EN

Stack Overflow用户
提问于 2011-02-15 22:51:19
回答 1查看 340关注 0票数 0

我正在尝试创建一个脚本来从服务器中的多个数据库中获取数据,然后我希望它继续到下一个服务器并执行相同的操作。我已经创建了一个脚本来处理一台服务器及其所有数据库。该脚本对于所有数据库、所有服务器中的表都是相同的。

我的问题是,如何让脚本识别我链接到当前服务器的链接服务器,并继续从这些服务器获取数据?是否存在有人可能知道的隐藏存储过程或命令?我基本上想在我的所有服务器上运行下面的脚本。当迭代完一台服务器中的所有数据库时,我希望它继续到下一台服务器并执行相同的操作。我将把所有数据保存在一个表中。

下面是我的脚本,我想让脚本通过5台服务器运行,我目前已经链接到我的一台服务器上:

代码语言:javascript
复制
   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

我应该添加另一个游标吗?以下脚本中的一些内容:

从master..sysservers中选择服务器名,其中的服务器名类似于'sql%‘

EN

回答 1

Stack Overflow用户

发布于 2011-02-16 04:50:01

我只需将您的游标嵌套在链接服务器上运行的另一个游标中。在等于"SQL Server“的srvproduct字段上筛选来自master..sysservers的服务器列表。如果有任何东西是您不想要的列表,请将其放在not in子句中。然后,修改您的内部游标,将服务器名添加到查询中,从而得到一个由四部分组成的表名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5005118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档