从表变量中选择的数据与插入的顺序不同?

jes*_*vin 0 sql sql-server

我有一个数据类型为Varchar(MAX)的表变量.

我首先插入值'header'然后基于内连接,我接下来将'Details'插入到同一个表变量中.最后,我正在插入"预告片".

我得到的输出顺序为:'header',然后是'trailer',最后是'details'.

我所需的输出顺序如下:

Header 
Detail
Trailer
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个订单:

Header
Trailer
Detail
Run Code Online (Sandbox Code Playgroud)

注意:我无法在选择中使用asc/desc.我按照我需要的顺序插入.

Aar*_*and 6

如果在外部查询中不包含ORDER BY,请不要指望SQL Server读懂您的想法.无法保证SQL Server将按插入顺序返回数据.你应该在你的表变量中添加一个列[rank]或者什么.当您插入标题时,插入1,对于详细信息行,插入2,然后插入预告片3.现在,您可以添加ORDER BY [rank];到查询的末尾,获得可预测的结果,并且每个人都很高兴.

  • 不,你在想插入一个表就像插入一个平面文件; 不是.如果您不提供订单,SQL Server将以其认为最有效的顺序返回行.*有时*会与插入顺序相匹配,但并非总是如此. (3认同)
  • 需要明确的是,即使你执行`INSERT ... ORDER BY`,也不意味着当你'SELECT`时会尊重`ORDER BY`.换句话说,@ Lamak意味着你要在`SELECT`语句中添加一个`ORDER BY`,而不是`INSERT`. (2认同)
  • @RussellFox不保证.就像一个反例一样,将主键放在另一列上.除非**列上的字母或数字顺序恰好与插入顺序匹配,否则最可能的结果(但仍未保证)将是"繁荣". (2认同)