TSQL验证排序顺序/ UNION ALL

时间:2014-08-14 05:24:25

标签: sql-server-2008 tsql temp-tables union-all

CREATE PROCEDURE Test
AS
BEGIN
SELECT * FROM (
SELECT 1 AS a,'test1' as b, 'query1' as c
UNION ALL
SELECT 2 AS a,'test22' as b, 'query22' as c
UNION ALL
SELECT 2 AS a,'test2' as b, 'query2' as c
UNION ALL
SELECT 3 AS a,'test3' as b, 'query3' as c
UNION ALL
SELECT 4 AS a,'test4' as b, 'query4' as c
) As sample
FOR XML RAW

END
  1. 我们可以保证存储过程按给定顺序返回结果吗?

  2. 通常情况下,当我们将这些选择查询插入临时表时,我们无法保证其插入顺序。所以我们必须使用order by子句。但大部分时间它都给出相同的顺序。我们可以强制执行一些不同的命令吗?这与聚簇索引和非聚簇索引相关。

  3. 在第二种情况下,我们可以通过添加标识列来强制执行插入顺序吗?

1 个答案:

答案 0 :(得分:1)

插入数据时,SQL将其称为集合。当甚至将数据写入光盘时,它会尝试占用最小的空间并开始在免费页面中插入行,它首先在非均匀的范围内找到。因此,当您查询数据时,结果取决于现金中信息的顺序以及从硬盘读取的信息的顺序。我认为几乎不可能预测订单,因为它取决于操作系统,其他程序等的工作。