2012-03-15 13 views
6

Sto tentando di creare un nuovo report SSRS che restituirà e visualizzerà i valori di una stored procedure di SQL Server. Passerò il parametro @clientID alla stored procedure. Questo parametro è utilizzato in 3 diverse dichiarazioni BEGIN/END. Ogni istruzione BEGIN `END` accetta il parametro e crea una query, restituendo dati specifici.SSRS: restituisce più query in una stored procedure

Quando creo il report SSRS, segnalo l'origine dati per questa stored procedure, ma solo il set di risultati dal primo BEGIN/END dichiarazione viene restituito. Se eseguo la stored procedure in SSMS, ottengo 3 set di risultati diversi, come previsto.

Come posso ottenere quei 3 BEGIN/END set di risultati in un unico report?

codice di esempio:

CREATE PROCEDURE pClientData (@clientID varchar(30)) 
AS 

    DECLARE @Orders table (
      ... 
      ); 

    DECLARE @Results table (
      ... 
      ); 

    DECLARE @Status table (
      ...  
      ); 

    BEGIN 
     SET NOCOUNT ON; 

     -- Get all the orders by client 
     INSERT INTO @Orders 
     SELECT ... 


     -- Return the results -- 
     SELECT * 
     FROM @Orders; 

    END 

    BEGIN 
     SET NOCOUNT ON; 

     -- Determine the Results 

     INSERT INTO @Results 
     SELECT ... 

     SELECT * 
     FROM @Results; 

    END 

    BEGIN 
     SET NOCOUNT ON; 

     SET @Status = (
     SELECT ... 
     ); 

     SELECT @Status as Status; 

    END 
    GO 

chiamata Query da SSRS:

EXEC pClientData @clientID 

risposta

5

Purtroppo, questo non è possibile.

Secondo il libro Applied Microsoft SQL Server 2008 Reporting Services
Da Section 4.3.5 - Working with Stored Procedures:

Se una stored procedure restituisce più set di righe (esegue più SELECT dichiarazioni), solo il primo set di righe viene elaborato dal Report. Se sono necessari tutti i risultati, prendere in considerazione l'implementazione di una procedura di wrapper memorizzata che unisce i set di righe multipli in una tabella temporanea e restituisce tutte le righe con un'istruzione SELECT.

Come suggerito, è necessario effettuare una sorta di regolazione della procedura memorizzata per ottenere ciò. O creare un wrapper per restituire tutti i risultati in un singolo set o dividere in tre la stored procedure esistente.

Nota: Al momento, è possibile ottenere un pdf of the ebook here, ma potrebbe avere tirato giù.

+0

Grazie per il link. Ti credo - ma non pensi che sia un modo inefficiente di interrogare? Piuttosto che calcolare qualcosa una volta e usarlo 3 posti, so che devo calcolarlo 3 volte separate? Lame ... – mikebmassey

+0

@mikebmassey Sono d'accordo, è zoppo ... qualcosa che ho dovuto fare in passato quando un calcolo è molto costoso ...Ho la prima stored procedure fare il calcolo e salvare i risultati in una tabella (non temporanea) prima di restituire il risultato, e quindi fare in modo che le seguenti stored procedure facciano riferimento alla tabella che è stata popolata dalla prima chiamata ... Naturalmente, questa potrebbe essere più difficile a seconda di quante diverse versioni dei dati esistono/concorrenza/etc ... –

+0

Non ho pensato di usare una tabella temporanea. Quindi, '# viverà, ma non' @ 'dalla query alla query? – mikebmassey

1

Basta aggiungere un altro parametro: ResultSetN e output corresponsing set di risultati, a seconda di tale parametro. 1 restituirà gli ordini 2 restituirà i risultati 3 restituirà lo stato È quindi possibile chiamare la procedura memorizzata 3 volte con il numero corrispondente.

EXEC pClientData @clientID, 1

EXEC pClientData @clientID, 2

EXEC pClientData @clientID, 3

Problemi correlati