DECLARE @sql NVARCHAR(MAX) = N'';
DECLARE @edition INT = CONVERT(INT, SERVERPROPERTY('EngineEdition'));
IF @edition IN (3, 8) -- 'Enterprise/Developer Edition detected - Running ONLINE rebuild'
SELECT @sql += N'RAISERROR(''Rebuilding ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''',0,1) WITH NOWAIT; ALTER INDEX ALL ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' REBUILD WITH (ONLINE = ON); ' FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.is_ms_shipped = 0;
ELSE -- 'Standard/Other Edition detected - Running OFFLINE rebuild'
SELECT @sql += N'RAISERROR(''Rebuilding ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ''',0,1) WITH NOWAIT; ALTER INDEX ALL ON ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' REBUILD; ' FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.is_ms_shipped = 0;
EXEC sp_executesql @sql;
EXEC sp_updatestats; -- Update statistics