web-dev-qa-db-ja.com

AUTO_CREATE_STATISTICS / AUTO_UPDATE_STATISTICSがデータベースに対して有効になっていることを確認する方法

さまざまな環境(dev、test、prod、predprod ...)のさまざまなデータベースを維持するプロジェクトデータベースがあるので、AUTO_CREATE_STATISTICSおよびAUTO_UPDATE_STATISTICSis に設定 OFF/ON各DBに対して、そしてそのOFF-をONに変更します。

ALTER DATABASE  DB
SET AUTO_CREATE_STATISTICS ON

ALTER DATABASE  DB
SET AUTO_UPDATE_STATISTICS ON

どうすればこれを達成できますか?

2
Omar AMEZOUG

これは動的SQLクエリを使用します。システムデータベースは除外されます。 is_auto_create_stats_onまたはis_auto_update_stats_on 0 OFFをチェックし、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

実際の実行前に、sp_executesqlをマスクして結果を確認できます

4
Squirrel
DECLARE @SQL    NVARCHAR(MAX) = ''

-- getting the commands list
SET @SQL = (
    SELECT '' + x.cmd
    FROM (
        select 'ALTER DATABASE ' + QUOTENAME(name) + ' SET AUTO_CREATE_STATISTICS ON;' AS cmd
        from sys.databases
        WHERE database_id > 4
            AND is_auto_create_stats_on = 0
        UNION ALL
        select 'ALTER DATABASE ' + QUOTENAME(name) + ' SET AUTO_UPDATE_STATISTICS ON;'
        from sys.databases
        WHERE database_id > 4
            AND is_auto_update_stats_on = 0
    ) x
    FOR XML PATH('')
);

IF @SQL IS NOT NULL BEGIN
    SELECT @SQL;

--uncomment to execute
--  EXEC sp_executesql @SQL;
END
2
Denis Rubashkin