Igual que en Oracle hi ha una taula on es llisten totes les taules de la base de dades (dba_tables) i podem utilitzar per realitzar operacions de manteniment de forma dinàmica, en Sql Server podem fer el mateix consultant la taula [basededades].dbo.sysobjects.
En l'exemple inferior (com en altres que he penjat) actualitzo les estadístiques de totes les taules d'una base de dades de Sql Server de forma dinàmica consultant el diccionari de dades. Aquest es podria encapsular en un stored procedure o directament executar en un job l'Agent de Sql Server per mantenir actualitzades les estadístiques de totes les taules d'una base de dades de forma automàtica.
-- Declaració de variables
DECLARE @dbName sysname
DECLARE @sample int
DECLARE @SQL nvarchar(4000)
DECLARE @ID int
DECLARE @Taula sysname
DECLARE @RowCnt int
-- Filtre per base de dades i percentatge per recalculi d'estadístiques
SET @dbName = 'AdventureWorks2008'
SET @sample = 100
--Taula temporal
CREATE TABLE ##Taules
(
TableID INT IDENTITY(1, 1) NOT NULL,
TableName SYSNAME NOT NULL
)
--Aliments la taula amb la llista de taules
SET @SQL = ''
SET @SQL = @SQL + 'INSERT INTO ##Taules (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, @Taula = TableName
FROM ##Taules
ORDER BY TableID
SET @RowCnt = @@ROWCOUNT
-- Per cada taula
WHILE @RowCnt <> 0
BEGIN
SET @SQL = 'UPDATE STATISTICS ' + @dbname + '.dbo.[' + @Taula + '] WITH SAMPLE ' + CONVERT(varchar(3), @sample) + ' PERCENT'
EXEC sp_executesql @statement = @SQL
SELECT TOP 1 @ID = TableID, @Taula = TableName
FROM ##Taules
WHERE TableID > @ID
ORDER BY TableID
SET @RowCnt = @@ROWCOUNT
END
--Eliminen la taula
DROP TABLE ##Taules