mar*_*rkS 3 sql-server sql-server-2008 sql-server-2008-r2
我注意到,当写入插入表变量的sproc值时,插入的顺序与插入顺序不同.有没有办法禁用此自动排序而不添加另一列进行排序?想到的想法是创建自动索引或一些整理设置......任何想法?
访问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
Run Code Online (Sandbox Code Playgroud)
简短的回答(可能)是"因为存储引擎将行存储在无序堆中,并且当您未指定ORDER BY时,这会影响行的出现."
除非在SELECT查询中提供ORDER BY,否则根据SQL规范,未定义排序顺序.这就是它在每个SQL数据库中的方式,无论是MySql,Oracle还是SQL Server.如果数据按照您期望的顺序从表中出来,那么巧合,或者很可能是优化器如何生成查询的副作用,或者存储引擎如何选择物理存储行(可能是这种情况下的根本原因).
如果您按照所需的排序顺序向表中添加聚簇索引,很多时候(但并非总是如此)表将按您期望的顺序出现. 不要依赖这种行为.
| 归档时间: |
|
| 查看次数: |
4962 次 |
| 最近记录: |