为什么记录没有按预期排序?



我正在尝试创建一个脚本,我需要迭代表的行,但我想按类型排序,然后按 ID 排序。我正在使用以下代码:

declare @MyTempTable table
(
MyId bigint
);
INSERT INTO @MyTempTable 
(MyId)
SELECT MyId
FROM MyTable
where MyForeignKey = 8
order by MyIdType, MyId;
while exists(select 1 from @MyTempTable)
begin
select top 1 @myFirstRow = x.MyId from @MyTempTable x;
--Do something
end

问题是,当我获得临时表的第一行时,我没有得到预期的行,我得到了 ID 最低的行,但它属于类型较高的类型,所以当我填充临时表时,似乎没有考虑顺序条件。

所以我想知道如何按照我需要的顺序迭代结果,首先按类型排序以按类型对行进行分组,然后按每个组中的 ID 排序。

这样的东西可能会更好用:

declare @MyTempTable table
(
MyId bigint,
order_id INT
);
INSERT INTO @MyTempTable 
(MyId, 
order_id)
SELECT MyId,
ROW_NUMBER() OVER (ORDER BY MyIdType, MyId) AS order_id
FROM MyTable
where MyForeignKey = 8;
while exists(select 1 from @MyTempTable)
begin
DECLARE @order_id INT;
select top 1 @myFirstRow = x.MyId, @order_id = x.order_id from @MyTempTable x ORDER BY order_id;
--Do something
DELETE FROM @MyTempTable WHERE order_id = @order_id;
end;

现在我们将顺序存储在临时表中,因此我们可以使用它以正确的顺序将行拉回,当我们完成一行并想要删除它时,这也很有用。

最新更新