我正在使用 SQL Server 2008-R2 速成版。
我编写了如下所示的查询来生成从 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 行。在新窗口中,它运行正常。
编辑2
除了随机获得正确/错误的结果外,似乎还有其他问题。对于某些数字,例如 655360,我现在得到的结果始终不正确。