| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 
 | DECLARE @NAME_BASE VARCHAR(255)
DECLARE @NAME_TABLE VARCHAR(255)
DECLARE @NAME_INDEX VARCHAR(255)
DECLARE @SQL1 NVARCHAR(1000)
DECLARE @SQL2 NVARCHAR(1000)
DECLARE @SQL3 NVARCHAR(1000)
DECLARE @ID_BDD INT
DECLARE @ID_OBJECT INT
DECLARE @ID_INDEX INT
DECLARE @FRAG FLOAT
DECLARE @NOM_TABLE VARCHAR(500)
CREATE TABLE TEMPTABLE (
  ID INT,
  NAME VARCHAR(500),
  INDEXID INT,
  FRAG FLOAT,
  NOM_TABLE VARCHAR(500)
)
DECLARE @PARCOURS_BASE AS CURSOR
SET @PARCOURS_BASE=CURSOR FOR SELECT name, database_id FROM sys.databases where NAME NOT IN ('master','model','msdb','tempdb') 
OPEN @PARCOURS_BASE
/* on se place au premier enregistrement*/
FETCH @PARCOURS_BASE INTO @NAME_BASE, @ID_BDD
/*on parcourt les bases*/
WHILE (@@FETCH_STATUS=0)
BEGIN
  PRINT 'base:'
  PRINT @NAME_BASE
  
  SET @SQL1 = 'INSERT INTO TEMPTABLE (ID,NAME,INDEXID) SELECT object_id,name,index_id FROM ' + @NAME_BASE + '.sys.indexes WHERE name not like ''PK_%'' AND name not like ''clust'' AND name not like ''clst'' AND name not like ''nc%'' AND name not like ''queue_secondary_index'' AND name not like ''docid'' AND name not like ''queue_clustered_index'' AND name not like ''cl'' AND name not like''i%'' '
  PRINT @SQL1
  EXECUTE(@SQL1)
  
  
  
  DECLARE @PARCOURS_TABLE AS CURSOR
  SET @PARCOURS_TABLE=CURSOR FOR SELECT ID,NAME,INDEXID FROM TEMPTABLE FOR UPDATE
  OPEN @PARCOURS_TABLE 
  FETCH @PARCOURS_TABLE INTO @ID_OBJECT, @NAME_INDEX, @ID_INDEX
  WHILE (@@FETCH_STATUS=0)
  BEGIN
   
 
    PRINT @ID_BDD
    PRINT @ID_OBJECT
    PRINT @ID_INDEX
    SET @SQL2 = 'UPDATE TEMPTABLE SET FRAG=(SELECT AVG(avg_fragmentation_in_percent) FROM ' + @NAME_BASE + '.sys.dm_db_index_physical_stats(' + CAST(@ID_BDD AS VARCHAR(10)) + ',' + CAST(@ID_OBJECT AS VARCHAR(10)) + ',' + CAST(@ID_INDEX AS VARCHAR(10)) + ',NULL,NULL)) WHERE ID='+ CAST(@ID_OBJECT AS VARCHAR(10)) + ' AND NAME=''' + @NAME_INDEX + ''' AND INDEXID=' + CAST(@ID_INDEX AS VARCHAR(10))
    PRINT @SQL2
    EXEC(@SQl2)
    SELECT 
      @FRAG=FRAG
    FROM 
      TEMPTABLE
    WHERE
      ID=@ID_OBJECT AND 
      NAME = @NAME_INDEX AND 
      INDEXID = @ID_INDEX
     
    print @NAME_INDEX
    print ('frag:')
    print @FRAG
	
	SET @SQL3 = 'UPDATE TEMPTABLE  SET NOM_TABLE=(SELECT name FROM ' + @NAME_BASE + '.sys.tables WHERE ID='+ CAST(@ID_OBJECT AS VARCHAR(10)) + ')'						
	
    PRINT @SQL3
    EXEC(@SQL3)
/*récupération nom de la table pour reconstruction DBCC DBREINDEX 
    SET @SQL3 = 'SELECT NAME_TABLE =name FROM ' + @NAME_BASE + '.sys.tables WHERE object_id=@ID_OBJECT '   PRINT @SQL3
    EXEC(@SQL3)
    */
           
    SELECT 
      @NOM_TABLE=NOM_TABLE
    FROM 
      TEMPTABLE
    WHERE
      ID=@ID_OBJECT AND 
      NAME = @NAME_INDEX AND 
      INDEXID = @ID_INDEX
      
    PRINT ('nom de la table:')
    PRINT @NOM_TABLE
    
         /*IF @FRAG >=30.0
       BEGIN
         Set @Requete = 'DBCC DBREINDEX ('+@NAME_TABLE+', '+@NAME_INDEX+',80)'
         Exec (@Requete)
         print ('reconstruction')
       END*/  
      
    FETCH @PARCOURS_TABLE INTO @ID_OBJECT, @NAME_INDEX, @ID_INDEX
  END
  CLOSE @PARCOURS_TABLE
  DEALLOCATE @PARCOURS_TABLE
  /*on change de ligne de base*/
  DELETE FROM TEMPTABLE
  FETCH @PARCOURS_BASE INTO @NAME_BASE, @ID_BDD
END   
CLOSE @PARCOURS_BASE
DEALLOCATE @PARCOURS_BASE    
DROP TABLE TEMPTABLE |