0

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

我首先插入值'header',然后基于内部连接,我接下来将'Details'插入到同一个表变量中。最后,我要插入“预告片”。

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

我需要的输出是这样的:

Header 
Detail
Trailer

但我收到了这个订单:

Header
Trailer
Detail

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

4

2 回答 2

6

如果你没有在外部查询中包含 ORDER BY,不要指望 SQL Server 能读懂你的想法。不能保证 SQL Server 将按照插入的顺序返回数据。你应该在你的表变量中添加一个名为[rank]或其他东西的列。当您插入标题时,插入 1,为详细信息行插入 2,然后为尾部插入 3。现在您可以添加ORDER BY [rank];到查询的末尾,得到可预测的结果,每个人都很高兴。

于 2012-06-11T16:27:44.313 回答
2

SQL 数据库实际上并不了解您将事物放入的顺序,或者以给定的顺序存储数据。您可能希望表中的第二列具有要使用的值,以便保留所需的任何顺序。

把它想象成把一些东西交给你的朋友拿着——她稍后会为你准备好所有的东西,但同时她会把它存放在某个地方。当你不想为其他东西腾出空间时,她可能会移动它,或者可能会按照你给她的相同顺序把它交还给她,但你没有告诉她保持秩序,所以她不会.

数据库需要能够在后台移动事物,因此它们的构建方式本质上并不知道任何顺序 - 当您将其提供给数据库时,您需要知道顺序,以便您可以将其放回稍后订购您想要的。order 子句允许 SQL 对数据强加一个顺序,但它不记得或自己有一个。

于 2012-06-11T17:51:05.773 回答