Я использую SQL Server 2008-R2 Express Edition.
Я написал запрос, показанный ниже, для генерации числовых последовательностей от 1 до @n.При тестировании (только в окне запроса) я обнаружил, что, если я значительно изменил значение @n, я получу неправильные результаты.Повторное выполнение выдает те же ошибки.Однако, если я открою новое окно запроса, результаты будут идеальными.
Глядя на алгоритм, для меня не имеет смысла, почему я должен получать нестабильные результаты (или даже то, что запрос может давать различныерезультаты для фиксированного ввода).
DECLARE @n INT;
SET @n = 65536;
DECLARE @t TABLE (n INT NOT NULL PRIMARY KEY);
IF @n > 0 BEGIN
DECLARE @r INT, @i INT, @l INT;
SET @r = FLOOR(1.442695040888964 * LOG(@n));
SET @i = 1;
SET @l = 0;
INSERT INTO @t (n) VALUES (1);
WHILE @l < @r BEGIN
INSERT INTO @t (n) SELECT n + @i FROM @t;
SET @i = @i * 2;
SET @l = @l + 1;
END;
INSERT INTO @t (n) SELECT TOP (@n - @i) n + @i FROM @t;
END;
--SELECT COUNT(1) FROM @t;
select * from @t
РЕДАКТИРОВАТЬ
Измените 65536 на 5000, выполните, вернитесь обратно к 65536 и прокрутите вниз, чтобы сказать строку 169,770.Я получаю строку 169770 = 40000. В новом окне она работает правильно.
EDIT2
Помимо получения случайно правильных / неправильных результатов, кажется, что-то еще не так.Теперь я получаю последовательно неправильные результаты для некоторых чисел, таких как 655360.