首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试通过声明数据在T-SQL中进行排序时出错

尝试通过声明数据在T-SQL中进行排序时出错
EN

Stack Overflow用户
提问于 2019-02-28 09:28:58
回答 1查看 56关注 0票数 0

我正在尝试学习T-SQL编程,我注意到我的以下代码有一个错误。这段代码是为了学习如何在没有order by的情况下进行排序,它看起来像是冒泡排序算法。

我首先创建了表,并在尝试进行排序后插入随机数

代码:

CREATE TABLE #NumbersArray
(
    ArrayIndex INT PRIMARY KEY,
    Value INT
)
GO

INSERT INTO #NumbersArray(ArrayIndex, Value)
    SELECT 0, 5
    UNION ALL
    SELECT 1, 1 
    UNION ALL
    SELECT 2, 3 
    UNION ALL
    SELECT 3, 4
    UNION ALL
    SELECT 4, 2

SELECT * FROM #NumbersArray
GO    

DECLARE @CurrentIndex INT,
        @MaxIndex INT,
        @swapoccured BIT

SET @swapoccured = 1
SET @MaxIndex = (SELECT COUNT(*) - 1 FROM #NumbersArray)

WHILE (@swapoccured = 1)
BEGIN
    SET @swapoccured = 0
    SET @CurrentIndex = 0

    WHILE (@CurrentIndex < @MaxIndex)
        DECLARE @value1 INT
        DECLARE @value2 INT
    BEGIN  -- Mistake was here. I put the begin in wrong place
        SET @value1 = (SELECT Value FROM #NumbersArray WHERE ArrayIndex = @CurrentIndex)
        SET @value2 = (SELECT Value FROM #NumbersArray WHERE ArrayIndex = @CurrentIndex + 1)

        IF (@value1 > @value2)
        BEGIN
            UPDATE #NumbersArray 
            SET Value = @value2 
            WHERE ArrayIndex = @CurrentIndex

            UPDATE #NumbersArray 
            SET Value = @value1 
            WHERE ArrayIndex = @CurrentIndex + 1

            SET @swapoccured = 1
         END

         SET @CurrentIndex = @CurrentIndex + 1
    END
END

SELECT * FROM #NumbersArray

所以我认为我的代码库在第二次排序的中间,因为我的while从来没有完成,但是我可以确定问题是什么。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54917021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档