수정: 2014년 SQL Server 직접 또는 백그라운드에서 문을 만들 때 통계를 만들 수 없습니다.

적용 대상
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

증상

문을 실행하여 통계를 만들거나 Microsoft SQL Server 2014에서 백그라운드에서 통계를 만드는 문을 실행한다고 가정합니다. 데이터 값이 15자리를 초과하고 데이터 분포가 잘 분산되지 않고 일부 씬 범위에서 밀도가 높으면 통계를 만들 수 없으며 오류 메시지가 없습니다.

해결 방법

이 문제는 다음과 같은 SQL Server 누적 업데이트에서 처음 해결되었습니다.

SQL Server 2014 SP1 /en-us/help/3067839 대한 누적 업데이트 1

2014년 SQL Server 누적 업데이트 8 /en-us/help/3067836

SQL Server 대한 누적 업데이트 정보

SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

      

추가 정보

다음 코드를 사용하여 4개 이상의 코어가 있는 서버에서 이 문제를 재현할 수 있습니다.

use master
go
drop database <DataBase Name>
go
create database <DataBase Name>
go
ALTER DATABASE <DataBase Name> SET AUTO_UPDATE_STATISTICS OFF
go
use <DataBase Name>;
go
create table <Table Name>
(
                id decimal(19,0) NULL
)
go
declare @i int = 0
DECLARE @NewRows AS table (id decimal(19,0))
insert into @NewRows values(1234567890123456789)
while @i < 12 begin
                insert into @NewRows select * from @NewRows
                set @i = @i + 1
end
insert into <Table Name> select * from @NewRows
go
declare @i int = 0
DECLARE @NewRows AS table (id decimal(19,0))
insert into @NewRows values(1234567890123457691)
while @i < 16 begin
                insert into @NewRows select * from @NewRows
                set @i = @i + 1
end
insert into <Table Name> select * from @NewRows
go
declare @i int = 0
DECLARE @NewRows AS table (id decimal(19,0))
insert into @NewRows values(1234567890123457692)
while @i < 12 begin
                insert into @NewRows select * from @NewRows
                set @i = @i + 1
end
insert into <Table Name> select * from @NewRows
go
create statistics stat on <Table Name> ([id])
go
use master
go
drop database <DataBase Name>
go

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.