Sorry, don't quite know how :hehe:
Here's something that sort of does what I want:
DECLARE @Database TABLE(Naam VarChar(20))
DECLARE@IndexNaamTABLE(
DatabaseNameVarChar(Max)
,TableNameVarChar(Max)
,IndexNameVarChar(Max)
,IndexIdInt
)
DECLARE@TableCountInt
DECLARE@SqlCmdnVarChar(Max)
INSERT @DataBase(Naam)
SELECT name FROM sys.databases D
WHERE D.name like 'McBam%'
SELECT * FROM @DataBase
SELECT @TableCount = (SELECT COUNT(*) FROM @DataBase)
Print @TableCount
SET@SqlCmd = 'USE ?;SELECT DB_NAME() AS DATABASENAME,
OBJECT_NAME(B.OBJECT_ID) AS TABLENAME,
B.NAME AS INDEXNAME,
B.INDEX_ID
FROM SYS.OBJECTS A
INNER JOIN SYS.INDEXES B
ON A.OBJECT_ID = B.OBJECT_ID
WHERE NOT EXISTS (SELECT *
FROM SYS.DM_DB_INDEX_USAGE_STATS C
WHERE B.OBJECT_ID = C.OBJECT_ID
AND B.INDEX_ID = C.INDEX_ID)
AND A.TYPE <> '''+'S'+'''
AND B.NAME > ''''
AND B.NAME not like '''+'%rowid%'+'''
ORDER BY 1, 2, 3 '
INSERT @IndexNaam (DatabaseName, TableName, IndexName, IndexId)
EXEC sp_MSforeachdb @SqlCmd
SELECT TableName, IndexName, Count(*) as Aantal FROM @DataBase
Inner Join @IndexNaam on DatabaseName = Naam
Group by TableName, IndexName
Having Count(*) = @TableCount
Order By TableName, IndexName
But it puts ALL unused indexes in my Variable table because it questions ALL databases.
Can I restrict the use of sp_MSforeachdb to the tables called 'McBam%' ??
Thanks for any insight and/or tips.
Cees