Objawy
Załóżmy, że wykonywana jest instrukcja służąca do tworzenia statystyk lub do tworzenia w tle w programie Microsoft SQL Server 2014. Jeśli wartości danych zawierają ponad 15 znaczących cyfr dziesiętnych, a rozkład danych nie jest prawidłowo rozłożony i jest dość gęsty w pewnych wąskich zakresach, nie można utworzyć statystyki i nie jest wyświetlany komunikat o błędzie.
Rozwiązanie
Ten problem został po raz pierwszy rozwiązany w następującej aktualizacji zbiorczej programu SQL Server.
Aktualizacja skumulowana 1 dla SQL Server 2014 z dodatkiem Service Pack 1 /pl-pl/help/3067839
Zbiorcza aktualizacja 8 dla systemu SQL Server 2014 /pl-pl/pomoc/3067836
Informacje o aktualizacjach zbiorczych dla programu SQL Server
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014 z dodatkiem SP1
- Najnowsza aktualizacja zbiorcza dla programu SQL Server 2014
Więcej informacji
Możesz użyć poniższego kodu, aby odtworzyć ten problem na serwerze, który ma więcej niż cztery rdzenie:
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
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.