2013-10-29 15 views
0

我有這個存儲過程:順序按從存儲過程的SQL Server

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 = '' 

但我想通過「這份執行」現場訂購的結果。

我無法編輯存儲過程。

+0

可能重複的[SQL服務器 - 從存儲過程](http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure) –

回答

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,並直接應用您所需的排序。

當然,如果「無法更改」是出於其他原因,那麼這可能不適用。

+0

感謝Damien ....對於性能方面是正確的在Sqlserver上創建一個臨時表或將數組排序到PHP代碼中? – Antonio

+0

@Antonio - 我不希望PHP能夠勝任SQL Server,但是性能上是否存在任何明顯的差異*可能取決於數據的確切結構 - 涉及的行和列的數量等。 –

+0

php代碼更復雜....我認爲sql方式是最好的! – Antonio

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; 
+0

我使用EXEC調用的過程包含一個臨時表。當我嘗試過很多其他的事情時,這種方法是有效的。謝謝! – thedude