Sql server 能否使用T-SQL对存储过程的结果进行排序?

Sql server 能否使用T-SQL对存储过程的结果进行排序?,sql-server,sql-server-2005,stored-procedures,Sql Server,Sql Server 2005,Stored Procedures,我在一个MSSQL 2005数据库系统上运行,该系统有许多存储过程。其中一个存储过程是报表,我希望在不编辑存储过程的情况下对其进行排序。有没有一种方法可以动态地对存储过程的结果进行排序:类似这样的方法: exec spReport order by ColumnT 不,你不能这样做。如果您知道结果集的结构,那么可以首先构建一个tmp表,插入tmp exec spReport,然后使用order by子句从tmp表中进行选择。您甚至可以使用OPENQUERY或OPENROWSET一起破解某些东

我在一个MSSQL 2005数据库系统上运行,该系统有许多存储过程。其中一个存储过程是报表,我希望在不编辑存储过程的情况下对其进行排序。有没有一种方法可以动态地对存储过程的结果进行排序:类似这样的方法:

exec spReport 
order by ColumnT

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

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

e、 g


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


只有当proc总是返回相同的列并且您需要CREATETABLE语句时,这才有效。如果没有,那么看看@Platon的链接。这不起作用,如图所示:@djangofan,你试过了吗?你为什么说它不起作用?我同意这样做,你不能做选择进入,但它比OPENROWSET更透明。至少,若存储过程返回相同的列集,我将使用INSERT INTO EXEC not OPENROWSET
INSERT INTO #table
EXEC spReport

SELECT *
FROM  #table
ORDER BY ColumnT