简体   繁体   English

来自多个SQL Server的数据库名称

[英]Database names from multiple SQL Servers

I am stuck with a SQL query. 我坚持使用SQL查询。 How do I get all the databases names from multiple SQL Servers at a time? 如何一次从多个SQL Server获取所有数据库名称? I have the server IP's in a table. 我在表中有服务器IP。

You can get the database informations using. 您可以使用获取数据库信息。

SELECT * from sys.databases

If you want to know this from other servers, in pure t-sql, you need to link the server. 如果你想从其他服务器知道这个,在纯t-sql中,你需要链接服务器。

More Information 更多信息

Update after a comment 评论后更新

You say that you cant link the servers. 你说你不能链接服务器。 Another alternative is to create a .NET CLR Object and embed them to the server. 另一种方法是创建.NET CLR对象并将它们嵌入到服务器中。

Than you can connect to other servers, without linking them together, and execute sql statements. 您可以连接到其他服务器,而无需将它们链接在一起,并执行sql语句。

More Information 更多信息

This gives all the databases of the current server 这给出了当前服务器的所有数据库

EXEC sp_databases

If you know the other server ips you could use sp_addlinkedserver to link them and get the desired results. 如果您知道其他服务器ips,则可以使用sp_addlinkedserver链接它们并获得所需的结果。

EDIT: following is a complete answer for you as I described above but using sys.databases 编辑:以下是一个完整的答案,如上所述,但使用sys.databases

DECLARE @T AS TABLE (dbName VARCHAR(250),ipAddress VARCHAR(20))
DECLARE @SERVERS AS TABLE (Id INT IDENTITY(1,1),serverIp VARCHAR(20),
                           rmUser VARCHAR(20),rmPassword VARCHAR(20))
DECLARE @ipAdd AS VARCHAR(20),@user AS VARCHAR(20), @pw AS VARCHAR(20),@rowCount AS INT

SELECT @rowCount = 1

--ADD THE LIST OF SERVERS WITH LOGIN USER NAME AND PASSWORDS HERE
INSERT INTO @SERVERS (serverIp,rmUser,rmPassword) 
    VALUES ('serverIp1','rmuser1','rmpassword1'), ('serverIp2','rmuser2','rmpassword2')

WHILE EXISTS(SELECT Id FROM @SERVERS WHERE Id = @rowCount)
BEGIN
SELECT @ipAdd = serverIp, @user= rmUser, @pw = rmPassword 
    FROM @SERVERS WHERE Id =  @rowCount

    --Link the server and add login
EXEC sp_addlinkedserver @ipAdd,N'SQL Server';
EXEC sp_addlinkedsrvlogin @rmtsrvname=@ipAdd, 
                          @useself='false',
                          @rmtuser=@user,
                          @rmtpassword=@pw

     --INSERT results into a temp view and then into @T
 EXEC('CREATE VIEW vTemp AS SELECT name FROM ['+@ipAdd+'].master.sys.databases')
 INSERT INTO @T  SELECT name,@ipAdd FROM vTemp

     --Drop view
 DROP VIEW vTemp

     --Drop login and link to the remort server
 EXEC sp_droplinkedsrvlogin @ipAdd, NULL
 EXEC sp_dropserver @ipAdd, NULL;

     SELECT @rowCount = @rowCount +1

END

--FINALLY YOUR RESULTS
SELECT * FROM @T

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM