从存储过程SQL Server排序

时间:2013-10-29 07:51:50

标签: sql-server stored-procedures sql-order-by

我有这个存储过程:

exec T2IntranetViaggi2SelezioneConMagazzinoCompetenza @Societa = 20, @Cliente = 55, @TipologiaData = 'P', @TipoData = 'S', @DataInizio = '2013-10-28 00:00:00', @DataFine = '2013-10-28 23:59:59', @DestinatarioCodice = null, @OrdineRiferimento = '', @RiferimentoInterno = '', @PassaggioTp = 'T', @UnitaMisura = '', @Esitato = 'T', @Consegnato = 'T', @CaricoLocalita = '', @CaricoCap = '', @CaricoProvincia = '', @CaricoNazione = '', @ScaricoLocalita = '', @ScaricoCap = '', @ScaricoProvincia = '', @ScaricoNazione = '', @MagazzinoCompetenza = '', @DocumentoNumero = ''

但我想通过“Documento”字段订购结果。

我无法编辑存储过程。

2 个答案:

答案 0 :(得分:3)

将sp的结果存储在table variable中,然后查询该表变量。

示例:

create proc p 
as
select code, name from customer
go
declare @t table
(
    code int,
    name varchar(30)
);
insert into @t
exec p;

select * from @t order by name desc;

答案 1 :(得分:1)

假设存储过程本身不使用INSERT...EXEC,那么您可以这样做:

CREATE TABLE #T (
    /* Columns as per the stored procedure's result set */
)

INSERT INTO #T (/* Column list */)
EXEC T2IntranetViaggi2SelezioneConMagazzinoCompetenza @Societa = 20, @Cliente = 55, ...

SELECT * FROM #T ORDER BY Documento

您还说您无法编辑存储过程 - 如果这是因为此过程还有其他调用者,那么您可能会考虑的一件事是将存储过程复制为用户定义函数(UDF),然后更改存储过程只是调用UDF。

然后,您可以在SELECT查询中自行直接查询UDF并直接应用所需的排序。

当然,如果“无法改变”是出于其他原因,那么这可能不适用。