2012-04-12 15 views
5

Ho una stored procedure che restituisce due selezioni, che uso in un report. La prima selezione è dati da visualizzare in formato tabulare ed i secondi sono metadati da visualizzare nella testa relazione, come mostrato di seguito:Come selezionare [temp table1] = [subselect 1], [temp table2] = [subselect 2] FROM [Stored procedure]

CREATE PROCEDURE dbo. GetReport  
@Input INT 
AS 
BEGIN   
    --Get #Metadata  
    -- #Results = f(#Metadata) … compex calculation   
    SELECT * FROM #Results  
    SELECT * FROM #Metadata  
END 

Dato che il calcolo sproc è piuttosto intenso, vorrei preparare le linee di riporto come dati semplici (in due tabelle: PrecalcResults e PrecalcMetadata) per alcuni parametri sproc maggiormente utilizzati durante la notte. Meglio vorrei selezionare direttamente i valori precalcolati o calcolarli con lo sproc secondo i parametri.

Per motivi di manutenzione vorrei utilizzare lo stesso sproc per calcolare i dati che sarebbero: 1. mostrato nel rapporto 2. essere immagazzinate nella PrecalcResults e PrecalcMetadata (con i parametri utilizzati)

Se io avrei un singolo selezionare sproc vorrei un approccio desctibed qui: Insert results of a stored procedure into a temporary table

Come ho sproc multiselect mi piacerebbe fare qualcosa come sopra ma con due tavoli. In .net vorrei fare DataSet.Tables [0] e DataSet.Tables [1] ..., ma voglio farlo in tsql, per eseguirlo nel lavoro quotidiano.

Ciò è possibile anche in MS SQL?


Devo scusarmi, dalla risposta in basso vedo che non ero molto chiaro. Mi piacerebbe implementare questa funzionalità come puro TSQL.

+0

prova a cercare "di record attivi multipli" (aka MARS). Avrai bisogno di usare il metodo 'NextRecordset' per spostarti da un recordset al successivo. – HABO

risposta

2

Sì, questo è possibile.

It's perfectly fine to return multiple result sets from a single stored procedure as you have suggested.

Il vostro unico problema potenziale è la limitazione di un TableAdapter essere in grado di tirare entrambi i set di risultati dalla stored procedure, but there's a very simple work-around for that issue.

+0

a meno che non sia una tabella temporanea, quindi non verrà trovato perché esiste solo sul server – Taryn

+0

@bluefeet Che non è stata la mia esperienza ... potrebbe essere un problema con il livello di accesso ai dati, o il tentativo di fare riferimento al tabella temporanea su una connessione separata ... Dovrebbe essere invisibile al client se la fonte di un'istruzione select sia o meno una tabella temporanea o non temporanea. –

+0

Beh, dipende da come lo si utilizza, se si dispone di una tabella temporanea che restituisce i dati in un processo memorizzato e si aggiunge la stored procedure a un file DataSet.xsd. La mia esperienza è che non è a conoscenza della tabella temporanea in quel momento poiché esiste sul server solo – Taryn

Problemi correlati