【问题标题】:Can the results of a stored procedure be sorted with T-SQL?存储过程的结果可以用 T-SQL 排序吗?
【发布时间】:2011-07-18 19:08:34
【问题描述】:

我在一个具有许多存储过程的 MSSQL 2005 数据库系统上运行。其中一个存储过程是“报告”,我想在不编辑存储过程的情况下对其进行排序。有没有办法对存储过程的结果进行动态排序:像这样:

exec spReport 
order by ColumnT

【问题讨论】:

    标签: sql-server sql-server-2005 stored-procedures


    【解决方案1】:

    您可以插入到临时表中。然后,从表中排序。

    例如

    INSERT INTO #table
    EXEC spReport
    
    SELECT *
    FROM  #table
    ORDER BY ColumnT
    

    【讨论】:

    • 这只有在 proc 总是返回相同的列时才有效(并且您将需要一个 create table 语句)。如果没有,请查看@Platon 的链接。
    • 这不起作用,如下所示:stackoverflow.com/questions/653714/…
    • @djangofan,你试过了吗?为什么你说它不起作用?我同意这种方式,你不能做select into,但它比OPENROWSET 更透明。至少,如果存储过程返回相同的列集,我将使用 INSERT INTO EXEC 而不是 OPENROWSET
    【解决方案2】:

    不,你不能这样做。如果您知道结果集的结构,您可以先构建一个#tmp 表,插入#tmp exec spReport,然后从带有order by 子句的#tmp 表中选择。您甚至可以使用 OPENQUERY 或 OPENROWSET 一起破解某些东西,但我建议您编辑 spReport 以始终​​使用您想要的顺序,或者采用参数并根据参数定义顺序。

    【讨论】:

      【解决方案3】:

      您应该用结果填充一个临时表,然后对其进行排序。这是显示如何执行第一部分的链接:

      How to SELECT * INTO temp table FROM Stored Procedure

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-26
        • 2012-03-11
        • 1970-01-01
        • 2010-11-20
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多