Um das für alle Datenbanken eines Datenbankservers auszuführen, eignet sich folgendes Skript:
DECLARE @SQL VARCHAR(1000)
DECLARE @DB sysname
DECLARE curDB CURSOR FORWARD_ONLY STATIC FOR
SELECT [name]
FROM master..sysdatabases
WHERE [name] NOT IN ('model', 'tempdb')
ORDER BY [name]
OPEN curDB
FETCH NEXT FROM curDB INTO @DB
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @SQL = 'USE ['+@DB+']'+CHAR(13)+'EXEC sp_updatestats'+CHAR(13)
PRINT @SQL
EXEC (@SQL)
FETCH NEXT FROM curDB INTO @DB
END
CLOSE curDB
DEALLOCATE curDB
Um das ganze als Stored Procedure zu hinterlegen und regelmäßig aufzurufen, z. B. von einer geplanten Aufgabe, z. B. folgendes machen:
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[expressmaint_uwekeim]
AS
BEGIN
SET NOCOUNT ON;
-- https://entwicklergate.de/t/alle-statistiken-und-indexe-einer-sql-server-datenbank-aktualisieren/483/2?u=uwekeim
DECLARE @SQL VARCHAR(1000)
DECLARE @DB sysname
DECLARE curDB CURSOR FORWARD_ONLY STATIC FOR
SELECT [name]
FROM master..sysdatabases
WHERE [name] NOT IN ('model', 'tempdb')
ORDER BY [name]
OPEN curDB
FETCH NEXT FROM curDB INTO @DB
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @SQL = 'USE ['+@DB+']'+CHAR(13)+'EXEC sp_updatestats'+CHAR(13)
PRINT @SQL
EXEC (@SQL)
FETCH NEXT FROM curDB INTO @DB
END
CLOSE curDB
DEALLOCATE curDB
END