gpt4 book ai didi

sql-server - 为什么 sql server 自动对表变量的行进行排序?

转载 作者:行者123 更新时间:2023-12-03 23:35:09 24 4
gpt4 key购买 nike

我注意到在编写存储过程中插入表变量的值与插入的顺序不同。有没有办法在不添加另一列进行排序的情况下禁用这种自动排序?想到的想法是正在创建的自动索引或一些排序规则设置......有什么想法吗?

访问 http://sqlfiddle.com/#!3/e1c06/13看看我的意思

declare @tmpTbl table (name varchar(100))
insert into @tmpTbl
select 'mark'
union
select 'frank'
union
select 'sharon'
union
select 'jason'

select * from @tmpTbl

最佳答案

简短的回答是(可能)“因为存储引擎将您的行存储在无序堆中,当您未指定 ORDER BY 时,这会影响行的输出方式。”

除非您在 SELECT 查询中提供 ORDER BY,否则根据 SQL 规范,排序顺序是未定义。这就是它在每个 SQL 数据库中的方式,无论是 MySql、Oracle 还是 SQL Server。如果数据以您期望的顺序从表中出来,那是巧合,或者很可能是优化器如何生成查询的副作用,或者存储引擎如何选择物理存储行(可能是在这种情况下的根本原因)。

如果您以所需的排序顺序向表中添加聚集索引,则多次(但并非总是)该表将以您期望的顺序出现。 永远不要依赖这种行为。

关于sql-server - 为什么 sql server 自动对表变量的行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14483561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com