我有 36 个 Microsoft SQL Server VM,每个都有一个以 _Sec 结尾的特定数据库作为数据库名称。该数据库中有 2 个表,我需要在单个查询中从中获取数据:tblConnGroups和tblConnGroupsDet.
tblConnGroups 有 3 列我需要包含在结果中
tblConnGroups.ID
tblConnGroups.GroupName
tblConnGroups.Provisional
Run Code Online (Sandbox Code Playgroud)
tblConnGroupsDet 结果中基本上有一个列。
tblConnGroupsDet.GroupID
tblConnGroupsDet.DBName
Run Code Online (Sandbox Code Playgroud)
tblConnGroups.ID是在使用的密钥tblConnGroupsDet.GroupID,然而,在tblConnGroups该ID领域具有一对多的关系到GroupID在字段tblConnGroupsDet。
Connection Group Name 只出现在tblConnGroups带有它的ID, 和其他信息中,但是GroupID将出现在tblConnGroupsDet带有成员数据库名称的每一行中。
USE [Name_Sec];
GO
SELECT ID,Groupname,Provisional
from [tblConnGroups]
ORDER BY ID ASC
ID GroupName Provisional
514 Name_FY0910 0
844 Name_FY1011 0
1588 NameTest_FY1516 1
USE [Name_Sec];
GO
SELECT GroupID,DBName
FROM [tblConnGroupsDet]
ORDER BY GroupID ASC
GroupID DBNAME
514 Name_Base
514 Name_FY0910
514 Name_State0910
514 Name_portal
514 Name_FY1011
Run Code Online (Sandbox Code Playgroud)
我尝试了几个不同的连接查询来匹配tblConnGroups.ID和tblConnGroupsDet.GroupID,但还没有完全弄清楚如何从这两个表中获取我想要的信息。
基本上,我需要一个查询,这将使我这些结果在那里GroupName会得到重复每个DBName地方的ID/GroupID比赛:
GroupName,DBName,FileSystemPath
Run Code Online (Sandbox Code Playgroud)
我希望这比泥泞更清楚,我没有做很多 DB Admin 工作,我们一直在寻找 DBA,这是我不经常戴的帽子。
SSMS 有一个称为服务器组的功能,它允许使用该功能。
如上图所示,添加一个新的服务器组,然后将每个目标 SQL Server 添加到该组中。
然后右键单击新创建的组,并选择“新建查询”。在查询窗口中输入以下内容:
DECLARE @cmd nvarchar(max);
SET @cmd = '';
SELECT @cmd = @cmd + 'USE ' + QUOTENAME(d.name) + ';
SELECT SECDB = ''' + d.name + '''
, g.*
, gd.*
FROM dbo.tblConnGroups g
INNER JOIN dbo.tblConnGroupsDet gd ON g.ID = gd.GroupID
ORDER BY gd.GroupID, gd.DBName;
'
FROM sys.databases d
WHERE d.name LIKE '%_Sec';
EXEC sys.sp_executesql @cmd;
Run Code Online (Sandbox Code Playgroud)
上面的代码将针对组中所有 SQL Server 上名为 *_Sec 的任何/所有数据库动态执行您的查询。
| 归档时间: |
|
| 查看次数: |
5301 次 |
| 最近记录: |