Проблема
Предположим, что вы выполняете инструкцию для создания статистики или оператор, который создает статистику в фоновом режиме в Microsoft SQL Server 2014. Если значения данных имеют более 15 значимых десятичных разрядов, а распределение данных не является хорошо распределенным и довольно плотным в некоторых тонких диапазонах, статистика не может быть создана, и сообщение об ошибке отсутствует.
Решение
Эта проблема была исправлена в следующем накопительном обновлении SQL Server.
Накопительный пакет обновления 1 для SQL Server 2014 с пакетом обновления 1 (SP1) /ru-ru/help/3067839
Накопительный пакет обновления 8 для SQL Server 2014 г. /ru-ru/help/3067836
Сведения о накопительных обновлениях для SQL Server
Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
- Последнее накопительное обновление для SQL Server 2014 с пакетом обновления 1 (SP1)
- Последнее накопительное обновление для SQL Server 2014 г.
Дополнительные сведения
Для воспроизведения этой проблемы на сервере с более чем четырьмя ядрами можно использовать следующий код:
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, перечисленных в разделе «Относится к».