【问题标题】:If no sorting order mentioned in SQL Server fetching data through EntityFramework gives different result如果 SQL Server 通过 EntityFramework 获取数据中没有提到排序顺序会给出不同的结果
【发布时间】:2014-08-20 07:18:14
【问题描述】:

我有一个存储过程,它在直接从 SQL Server Management Studio 执行时返回两条记录,我只从中获取前 1 条记录。

假设记录 1 和记录 2

当直接从 SQL Server Management Studio 执行存储过程时,它返回记录 1,但是通过实体框架调用相同的过程返回记录 2。但如果我对记录进行排序,它会给出正确的结果。

我只是想知道在这种情况下默认排序顺序是否不同/很重要?这两种情况有什么不同吗?有人可以在这方面帮助我吗?

场景:有两个日期列,比如说 Date1 和 Date2,排序是在 Date1 列上进行的,但对于这种情况,两条记录的 Date1 相同。当我直接调用存储过程时,排序顺序与 Record1 和 Record2 不同,但通过 EntityFramework 同时调用相同的结果,首先返回 Record2,然后是 Record1。我担心的是为什么从实体框架调用时它的行为不同?

提前致谢。

【问题讨论】:

    标签: sql asp.net .net sql-server entity-framework


    【解决方案1】:

    如果不给出排序顺序,则任何语句的返回都没有排序。这意味着理论上,即使在 SQL Server 中执行同一条语句两次,也可能产生不同顺序的结果。

    出于所有实际目的,“无序”的排序顺序可能会保持不变,因为它只是一个始终执行相同操作的计算机程序,但不能保证。

    如果您不给出排序顺序,则无法保证排序顺序。甚至不能保证连续调用的排序顺序相同。

    【讨论】:

    • 有两个日期列,比如说 Date1 和 Date2,排序是在 Date1 列上进行的,但对于这种情况,两条记录的 Date1 相同。当我直接调用存储过程时,排序顺序与 Record1 和 Record2 不同,但通过 EntityFramework 同时调用相同的结果,首先返回 Record2,然后是 Record1。我担心的是为什么从实体框架调用时它的行为不同?
    • 相同的答案:您没有为这两条记录指定明确的排序顺序,因此数据库及其之间的所有内容都可以随意对这两条记录进行排序。定义一个订单,你就不会有这个问题。
    • 看到程序总是以相同的顺序返回记录 1 然后记录 2 但是当通过实体框架调用相同的顺序时,它正在颠倒顺序我想知道它背后的原因......它正在发生总是以相同的顺序。
    • nvoigt 是完全正确的:如果您在存储过程中不包含和order by,则数据库将以任何顺序返回数据。您不必担心为什么会发生这种情况。如果重要的话,你只需要担心在存储过程中指定一个顺序。
    • @SmrutiRanjanSahoo 原因对你没有帮助。如果您的问题是“他们为什么这样做”,那么答案是“因为他们可以”。您需要问的问题是“我怎样才能做到这一点,这样就不会发生”。答案是“指定一个不留余地的排序顺序”。
    猜你喜欢
    • 2017-05-10
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多