varchar列按其自身排序

时间:2013-05-04 06:23:16

标签: c# sql sql-server wpf visual-studio-2010

enter image description here

我有表的列,有些列是varchar。我注意到表中的行是自动排序的。相反,我希望行的顺序与插入表中的顺序相同。有线索吗?请注意,我没有应用任何ORDER BY子句,并且列的日期都相同。

很明显,虽然我首先添加了测试用书3 ,但它自动低于测试用书2 ,这是不可取的。

是因为我的PK是复合的吗?

2 个答案:

答案 0 :(得分:5)

您没有准确指定您正在使用哪个RDBMS,但我可以说以下关于Microsoft SQL Server:

  1. 如果没有ORDER BY子句,您无法保证任何可预测/可重复的排序

  2. 如果要在插入行时按行排序,则需要:添加一个新列,该列可以是IDENTITY(可以是INT或BIGINT),也可以是DATETIME / DATETIME2数据类型,默认约束为GETDATE()或GETUTCDATE() AND 按此新字段订购

  3. 新字段与PK无关。这是参考别人提出的建议。 PK用于关系,而不是排序,虽然IDENTITY通常用于PK,但是有很多情况下具有一个或多个非自动递增字段的PK并且仍然具有自动递增字段。

  4. 如果您需要插入记录的毫秒/纳秒以及保证/可重复排序的详细信息,请两者 DATETIME / DATETIME2和IDENTITY字段。

  5. 添加这些字段中的一个或两个并不意味着任何特定的索引结构。它们的存在只允许您创建一个或多个索引,这些索引将包含它们以强制执行您想要的顺序。

答案 1 :(得分:1)

请注意,SQL不保证在插入或选择行时进行排序。 您可以查看类似于您的问题的答案here

我通过插入进行排序的方式是我会添加DATETIME列,它获取插入时的日期/时间值。
(如何做到这一点你可以在接受的答案中看到{ {3}})

然后在选择期间通过DATETIME列进行订单