He venido con esta solución, funciona muy bien:
create table dbo.IndexNames
(database_id int not null, object_id int not null, index_id int not null, index_name sysname not null)
go
create procedure dbo.GatherIndexNames
as
begin
declare @cur cursor
,@name varchar(128)
,@sql varchar(max)
truncate table dbo.IndexNames
set @cur = cursor for select name from sys.databases
where database_id >= 5
open @cur
fetch next from @cur into @name
while @@fetch_status = 0
begin
set @sql = '
insert into dbo.IndexNames
(database_id, object_id, index_id, index_name)
select db_id(''' + @name + '''),t.object_id, i.index_id, i.name
from [' + @name + '].[sys].[tables] t
inner join [' + @name + '].[sys].[indexes] i
on t.OBJECT_ID = i.object_id
where i.index_id <> 0'
exec (@sql)
fetch next from @cur into @name
end
O, simplemente tome esta lógica y agréguela como unir a la consulta original –
Tenga en cuenta que sys.indexes i s base de datos específica. En la pregunta anterior, el usuario muestra una consulta a sys.dm_db_index_usage_stats y especifica database_id en la función OBJECT_NAME. Esta función solo arrojará resultados para la base de datos abierta actualmente. –