SQL Server中的查询不稳定

时间:2011-03-06 08:43:36

标签: sql-server sql-server-2008 stability sql-server-2008r2-express

我正在使用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,我现在得到的结果始终不正确。

1 个答案:

答案 0 :(得分:2)

将ORDER BY添加到最后一个语句。

任何表格中都没有自然或默认顺序

编辑:

我将它归因于浮点数的使用

我在一小时前发布了如何做理货表:Maximum recursion has been exhausted