我需要从 SQL Server 获取每个数据库(连同其信息),我通过以下方式进行:
use master;
select *
from sys.databases
where database_id > 4
order by name
我还需要从扩展属性中获取特定值。目前我正在手动执行以下 FOR EACH DB 以获取此值:
use <db_name>
select value from sys.extended_properties
where class_desc='DATABASE' and name = 'Application Name'
但是,我需要分别获取第一个查询显示的每个数据库的列中最后一个查询输出的值。这可以做到吗?
您可以使用游标遍历数据库并将结果集存储在临时表中
测试
结果
我会使用动态 T-SQL 将结果组合成一个输出。
SELECT
上面的查询为实例上的每个在线、多用户、非系统数据库创建一个 T-SQL语句,并使用UNION ALL
. 然后它在一次执行中执行所有组合语句。如果任何数据库未处于多用户模式,则会生成错误以表明输出中未包含一个或多个数据库。补充其他答案 - 您可以使用
sp_ineachdb
- 由 Aaron Bertrand 编写,是Brent Ozar 的 firstResponderKit 的一部分。