我正在尝试调整SQL查询以检查服务器上每个数据库中存在的某个字段中的值。
有100个单独的数据库,我想检查每个数据库的具体记录。
答案可能是使用如下所示的命令,但我很难适应它。
EXECUTE sp_MSForEachDB
'USE ?; SELECT DB_NAME()AS DBName,
COUNT(1)AS [Count] FROM CUSTOMERS'
我通过以下链接取得了更大的成功;
https://stackoverflow.com/a/18462734/3461845
我需要能够执行此查询:
SELECT [SettingName],[SettingValue] FROM [HostSettings] Where [SettingName] = 'SMTPServer'
并且还为返回的每一行拉回数据库的名称;
DBName | SettingName | SettingValue
Database1 | SMTPServer | smtp.gmail.com
Database2 | SMTPServer | smtp.gmail.com
Database3 | SMTPServer | smtp.yahoo.com
非常感谢任何帮助。
谢谢!
答案 0 :(得分:2)
DECLARE @T TABLE
([DbName] SYSNAME,
[SettingName] VARCHAR(255),
[SettingValue] VARCHAR(255));
INSERT INTO
@T
EXEC sp_MSForEachDB
'SELECT
''?'',
[SettingName],
[SettingValue]
FROM
[?]..[HostSettings]
WHERE
[SettingName] = ''SMTPServer''';
SELECT * FROM @T;
答案 1 :(得分:0)
您可以在SSMS中使用已注册的服务器。在所有数据库上运行相同的查询。
在SSMS中,转到查看
然后已注册的服务器
右键单击本地服务器组,然后新服务器组
键入组的任何名称
然后是您创建的群组名称,右键单击新服务器注册
服务器名称 Localhost (例如)
然后右键单击 Localhost 和新查询。这将在所有数据库上运行所有相同的查询
答案 2 :(得分:0)
忽略下面。试试这个。
DECLARE @sql VARCHAR(8000)
DECLARE @string VARCHAR(100)= 'SMTPServer'
SET @sql = 'EXECUTE sp_MSForEachDB
''USE ?; SELECT DB_NAME()AS DBName,
SettingName,
SettingValue
FROM HostSettings
WHERE SettingName =''' + '''' + @string +'''''' + ''''
EXEC (@sql)