【发布时间】:2015-05-30 20:57:37
【问题描述】:
我的情况很复杂。有一个父数据库P,然后还有另一个数据库C,我被告知它与P 相同(都是SQL Server 2012)。他们都在不同的服务器上。我正在对P 和C 进行select * from tableA。检索到的数据完全相同,但顺序不同。这两个表具有相同的元数据。可能的原因是什么?
编辑 1
问题是,我有一个从客户那里得到的存储过程,它在P 上运行,然后在 SSRS 报告中使用。我无权访问P 或报告。我在C 上运行相同的存储过程。那是当我得到相同的行但顺序不同的时候。除了已经存在的那些之外,没有在运行C 的存储过程中添加其他order by 子句。如果数据库相同,数据相同,表结构也相同,为什么行的顺序不同?
编辑 2
tableA
COL1 COL2 COL3 COL4
---------- ---------- ---------- ----------
100 C 1 2015-01-01
101 A 2 2015-01-05
102 A 2 2014-01-01
103 B 4 2011-09-01
104 C 1 2015-01-01
如果在上面tableA(COL1是PRIMARY KEY),我做一个select * from tableA order by COL2, COL3, COL4,那么:
P中的结果
COL1 COL2 COL3 COL4
---------- ---------- ---------- ----------
102 A 2 2014-01-01
101 A 2 2015-01-05
103 B 4 2011-09-01
100 C 1 2015-01-01
104 C 1 2015-01-01
C中的结果
COL1 COL2 COL3 COL4
---------- ---------- ---------- ----------
102 A 2 2014-01-01
101 A 2 2015-01-05
103 B 4 2011-09-01
104 C 1 2015-01-01
100 C 1 2015-01-01
这就是问题所在。
PS - 数据库的排序规则发生了变化
【问题讨论】:
-
是的,在 COL2 上有一个订单,它们都在 COL2 上订购,因此订单是 AABCC,如果你想让它们相同,那么你需要在 order 子句中添加另一个列。在这种情况下,它将是 COL1,因为这是您的样本数据的唯一区别。就像这里的许多答案所指出的那样,即使一切都相同,也不能保证 SQL Server 中行的顺序,除非您指定它。
标签: sql sql-server-2012