В отличие от стандартного блока Maintance Plan-а, где статистика обновляется не смотря на дату последнего обновления, ниже приводится скрипт обновления статистики в базе данных с условием последней даты обновления статистики.
Сам скрипт:
declare @dt as datetime
set @dt= getdate()-01 -- дата, меньше которой будем обновлять
print (cast(error_number() as nchar(5))+'_'+ ERROR_MESSAGE())
drop table #t_stat
end catch
for select objname,shname,stname from #t_stat
declare @obj sysname
declare @sh sysname
--select * from #t_stat
в скрипте есть возможность поставить условие обновлять по дате и условие по таблицам.
Сам скрипт:
-- запрос
обновления статистики таблицы по дате последнего обновления
---1 получаем список
имен статистики для обновления и записываем во временную таблицуdeclare @dt as datetime
set @dt= getdate()-01 -- дата, меньше которой будем обновлять
begin try
select o.name as [objname],s.name as [shname],o.object_id,st.name as [stname]
into #t_stat
from sys.stats st
inner join sys.objects o on st.object_id=o.object_id
inner join sys.schemas s on o.schema_id=s.schema_id
where o.type='U'
--and STATS_DATE(st.object_id, st.stats_id) <@dt
--фильтр по дате
--and o.name='dbservers' --фильтра по
обеъкту
end try
begin catch
drop table #t_stat
end catch
--2 открываем
курсом и обновляем статистику
declare cur1 cursorfor select objname,shname,stname from #t_stat
open cur1
declare @stname sysnamedeclare @obj sysname
declare @sh sysname
fetch next from cur1 into @obj,@sh,@stname
WHILE (@@FETCH_STATUS <> -1)
BEGIN
execute ('update statistics ['+@sh+'].['+@obj+'] '+@stname +' WITH SAMPLE 80 PERCENT ')
print ('update statistics ['+@sh+'].['+@obj+'] ['+@stname +'] WITH SAMPLE 80 PERCENT ')
fetch next from cur1 into @obj,@sh,@stname
end
close cur1
DEALLOCATE
cur1--select * from #t_stat
drop table #t_stat
GOв скрипте есть возможность поставить условие обновлять по дате и условие по таблицам.
Комментариев нет :
Отправить комментарий