如何检查数据库是否启用了 AUTO_CREATE_STATISTICS/AUTO_UPDATE_STATISTICS

Oma*_*OUG 2 sql-server t-sql sql-server-2017

我有一个项目数据库,它维护来自不同环境(开发、测试、生产、predprod...)的不同数据库,我需要检查是否AUTO_CREATE_STATISTICSAUTO_UPDATE_STATISTICSis设置为OFF/ON针对每个数据库以及是否将OFF其更改为ON.

ALTER DATABASE  DB
SET AUTO_CREATE_STATISTICS ON

ALTER DATABASE  DB
SET AUTO_UPDATE_STATISTICS ON
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

小智 5

这使用动态 SQL 查询。它不包括系统数据库。检查is_auto_create_stats_onor is_auto_update_stats_on0OFF并将其更改为ON

declare @sql    nvarchar(max);

; with 
db as
(
    select  name, is_auto_create_stats_on, is_auto_update_stats_on 
    from    sys.databases
    where   name    not in ('master', 'tempdb', 'model', 'msdb')
    and     (
                is_auto_create_stats_on = 0
            or  is_auto_update_stats_on = 0
            )
)
select  @sql    = isnull(@sql + char(13), '')
                + 'ALTER DATABASE ' + quotename(db.name) + ' '
                + 'SET ' + o.opt + ' ON;'
from    db 
        cross apply
        (
            select  opt = 'AUTO_CREATE_STATISTICS'
            where   is_auto_create_stats_on = 0

            union all

            select  opt = 'AUTO_UPDATE_STATISTICS'
            where   is_auto_update_stats_on = 0
        ) o

-- print out for verification before execute
print   @sql
exec    sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)

您可以在实际执行之前屏蔽sp_executesql并验证结果