SQL08: tabella delle statistiche aggiornamento dinamico per tutta la banca dati

Come in Oracle vi è una tabella che elenca tutte le tabelle del database (dba_tables) e possiamo usarlo per effettuare interventi di manutenzione in modo dinamico in SQL Server può fare la stessa query la tabella [database].dbo.sysobjects.

Nell'esempio riportato di seguito (come in altri che ho appeso) aggiornare le statistiche per tutte le tabelle di un database, SQL Server in modo dinamico interrogando il dizionario dei dati. Questo potrebbe essere incapsulati in una stored procedure o in un lavoro di eseguire direttamente i SQL Server Agent per tenere le statistiche aggiornate su tutte le tabelle di un database automaticamente.

-- Dichiarazione di variabili 
    DECLARE @dbName    sysname
    DECLARE @sample int
    DECLARE @SQL nvarchar(4000)
    DECLARE @ID int
    DECLARE @Tabella sysname
    DECLARE @RowCnt int

    -- Filtro per database e la percentuale per il ricalcolo delle statistiche  
    SET @dbName = 'AdventureWorks2008'
    SET @sample = 100

   --Temporary Table
    CREATE TABLE ## Tabelle
    (
     TabelleID INT IDENTITY(1, 1) NOT NULL,
     TableName SYSNAME NOT NULL
    )

    --We feed the tabella con l'elenco di tabelle
    SET @SQL = ''
    SET @SQL = @SQL + 'INSERT INTO ##Tabelle (TableName) '
    SET @SQL = @SQL + 'SELECT [name] FROM ' + @dbName + '.dbo.sysobjects WHERE xtype = ''U'' AND [name] <> ''dtproperties'''

    EXEC sp_executesql @statement = @SQL

    SELECT TOP 1 @ID = TableID, @Tabella = TableName
    FROM ##Tabelle
    ORDER BY TableID

    SET @RowCnt = @@ROWCOUNT
   
    -- Per ogni tabella

    WHILE @RowCnt <> 0
    BEGIN

     SET @SQL = 'UPDATE STATISTICS ' + @dbname + '.dbo.[' + @Tabella + '] WITH SAMPLE ' + CONVERT(varchar(3), @sample) + ' PERCENT'

     EXEC sp_executesql @statement = @SQL

     SELECT TOP 1 @ID = TableID, @Tabella = TableName
     FROM ##Tabelle
     WHERE TableID > @ID
     ORDER BY TableID

     SET @RowCnt = @@ROWCOUNT

    END

   --Eliminare la tabella
     DROP TABLE ##Tabelle