【问题标题】:using stored procedure find cause of dis-ordering of the result set使用存储过程查找结果集无序的原因
【发布时间】:2011-04-06 12:39:10
【问题描述】:

我在 sql 存储过程中遇到问题。我有一个存储过程,其中包含一个动态 sql 查询、创建临时表、将数据插入到这个临时表中。在我的本地,此存储过程的结果显示正常。但在生产环境中,结果的顺序发生了变化。我只有那个生产的选择权限,所以我不能在生产数据库中运行那个 sp。任何人都可以提出任何解决方案。是否有可能运行该 SP 并在生产 sp 中查看结果。谢谢

【问题讨论】:

    标签: sql stored-procedures dynamic-sql


    【解决方案1】:

    恐怕您的问题不是很具体,但是如果您依赖结果的顺序并且您没有在返回结果的查询中使用ORDER BY(在您的情况下,很可能最后一条语句)那么你应该。除非您使用ORDER BY,否则无法保证结果的顺序。

    如果您已经是,也许您可​​以发布查询的相关部分。

    【讨论】:

    • 感谢您的所有回复。 order by 在查询中完成。主要问题是它只发生在一个存储过程而不是其他 Sp。如果您需要任何其他详细信息,请告诉我
    【解决方案2】:

    我会检查两个数据库的排序规则是否相同。假设 MS Sql Server,在 Mgmt Studio 中右键单击数据库节点并查看属性。排序规则类似于SQL_Latin1_General_CP1_CI_AS

    如果它们不匹配,则“自然”排序顺序可能会有所不同,除非您明确指定 ORDER BYclause。

    【讨论】:

    • hi 在两种环境中的排序规则是相同的。这里是查询的简要说明。首先我们选择记录并插入到临时表中。然后再创建一个临时表来存储最终结果。在这个临时表中,我们首先插入标题。'insert into #TempChaseReport values(''Student FName'',''Student LName'',''Practice Exam 1'',''Practice Exam 2'')'
    • 然后我循环遍历第一步中选定的记录并将其插入到这个 tempChaseReport 表中。插入所有记录后,我又创建了一个临时表,我在其中执行以下查询。插入#TempChaseReport2 Select * FROM #TempChaseReport where id_num=1 insert into #TempChaseReport2 Select * FROM #TempChaseReport where id_num!=1 order by MgrLoginID,LastName,myflag 我正在做 order by。
    • 最后,当我最终选择要显示的记录时。
    • 我看到你正在做一个SELECT *ORDER BY 列出了特定的列。你有没有试过看看当你明确地按每列排序时会发生什么?然后,将它们从 ORDER BY 子句 1 中删除,直到排序顺序不同 - 此时,您知道问题列是什么。
    【解决方案3】:

    我可以在没有更多信息的情况下想到两种可能性:

    1) 生产环境和本地环境的配置不同,尤其是关于 tempdb 数据库的排序规则(除非您在其 CREATE 语句中另外指定,否则它将是临时表使用的默认排序规则)。因此,任何字符字段的排序都会表现不同。

    2) 您根本没有进行任何特定的排序,在这种情况下,“默认”顺序由许多因素决定,并且在服务器之间不太可能相同。

    【讨论】:

    • 我已经在存储过程中完成了排序。我只是检查两个数据库中的排序规则。感谢您的回复。
    • 两个数据库中的排序规则相同。如果还有其他参数,请告诉我。
    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 2014-06-15
    • 2013-05-19
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多