• Having used this as the basis for my own version though I best update again - there is an error in the code when you have multiple schemas in a database where tablenames are repeated (so schemaA.Table1 and schemaB.Table1).

    Solution is to make the code schema aware, so changing this code section :

    INSERT INTO #TEMPFRAG

    SELECT OBJECT_NAME(F.OBJECT_ID) OBJ,I.NAME IND,

    F.AVG_FRAGMENTATION_IN_PERCENT,

    F.PAGE_COUNT,TABLE_SCHEMA

    FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(),NULL,NULL,NULL,NULL) F

    JOIN SYS.INDEXES I

    ON(F.OBJECT_ID=I.OBJECT_ID)AND I.INDEX_ID=F.INDEX_ID

    JOIN INFORMATION_SCHEMA.TABLES S

    ON (S.TABLE_NAME=OBJECT_NAME(F.OBJECT_ID))

    --WHERE INDEX_ID<> 0

    AND F.DATABASE_ID=DB_ID()

    AND OBJECTPROPERTY(I.OBJECT_ID,''ISSYSTEMTABLE'')=0'

    with this

    INSERT INTO #TEMPFRAG

    SELECTOBJECT_NAME(F.OBJECT_ID)

    ,I.NAME IND

    ,F.AVG_FRAGMENTATION_IN_PERCENT

    ,F.PAGE_COUNT

    , s.name -- NOTE CHANGED FROM TABLE_SCHEMA

    --,i.allow_page_locks -- I use this to better handle allow_page_locks true / false

    FROMSYS.DM_DB_INDEX_PHYSICAL_STATS ('+cast(@DB_ID as varchar)+',NULL,NULL,NULL,NULL) F

    JOINSYS.INDEXES I ON(F.OBJECT_ID=I.OBJECT_ID) AND I.INDEX_ID=F.INDEX_ID and i.is_disabled = 0 -- Note I'm skipping disabled indexes

    joinsys.tables t on f.object_id = t.object_id -- NOTE NEW LINE TO REPLACE USE OF INFORMATION_SCHEMA

    joinsys.schemas s on s.schema_id = t.schema_id -- NOTE NEW LINE TO COMPLETE JOIN

    --WHERE INDEX_ID<> 0

    AND F.DATABASE_ID=DB_ID()

    ANDOBJECTPROPERTY(I.OBJECT_ID,''ISSYSTEMTABLE'')=0

    The only other change you want to make for the above to work is to add at the start of your code :

    declare @DB_ID int

    set @DB_ID= DB_ID('Your DB Name Here')

    Because that gets around a failure in the original source if you want to run this for any database from any database.