none
Come Leggere una Stored Con Multiple Resultsets da Un'altra Stored Procedure RRS feed

  • Domanda

  • Salve, Vorrei Capire come posso leggere multiple results che vengono come risultato d'unaltra stored procedure ...

    Qua sotto scrivo un essempio di quello che vorrei fare

    Create Procedure Multiple_Results

    ...

    BEGIN

       Select * from Table1

       Select * from Table2

     

    END

    Exec Multiple_Results ....

     

    Insert Into #memTable1

    Exec Multiple_Results!Cursor1

    ....

     

    Insert Into #memTable2

    Exec Multiple_Results!Cursor2

     

     

    Vorrei fare il miglior modo possibile per fare quest'operazione

     

     

    lunedì 21 novembre 2011 11:34

Tutte le risposte

  • Ciao Cesar, prova di utilizzare Function come questo esempio :

    ------------------------------TABLE------------------------
    -----------------------------------------------------------
    create table Table1 (ID int,nome varchar(50))
    create table Table2 (ID int,DateN datetime)
    insert Table1
    select 1,'Patricia' union
    select 2,'Marco' 
    insert Table2
    select 1,'19680211' union
    select 2,'19701211' 
    create table #memTable1 (ID int,nome varchar(50))
    create table #memTable2 (ID int,DateN datetime)
    ------------------------------FUNCTION------------------------
    -----------------------------------------------------------
    CREATE Function [dbo].Multiple_Results1()
    Returns @T 
    Table (ID int,nome varchar(50))
    As
    Begin
    insert @T select * from Table1 
    return
    End
    CREATE Function [dbo].Multiple_Results2()
    Returns @T 
    Table (ID int,DateN datetime)
    As
    Begin
    insert @T select * from Table2
    return
    End
    ------------------------------QUERY------------------------
    -----------------------------------------------------------
    Insert Into #memTable1
    select * from [dbo].Multiple_Results1()
    Insert Into #memTable2
    select * from [dbo].Multiple_Results2()
    ------------------------------OUTPUT------------------------
    -----------------------------------------------------------
    select * from #memTable1
    --1 Patricia
    --2 Marco
    select * from #memTable2
    --1 1968-02-11 00:00:00.000
    --2 1970-12-11 00:00:00.000
    

     

     

    Best regards
    lunedì 21 novembre 2011 12:00
  • mmmm.. ringrazzio la risposta ma non la tengo come valita

    Come posso leggere all'interno d'una stored i resultsets che visualizo con questa chiamata ?

    Exec sp_monitor

    lunedì 21 novembre 2011 15:01
  • Vorrei avere lo stesso comportamento della mia richiesta originale con la chiamata alla stored

     

    Exec Sp_Monitor come posso riuscire a leggere i valori visualizati nella resultset

    lunedì 21 novembre 2011 15:27
  • Cesar,

    che versione di SQL Server utilizzi ? Se usi SQL Server 2005 o successive invece di utilizzare sp_monitor, potresti utilizzare le DMV per monitorare CPU memoria ed I/O.

    In questo articolo di Technet trovi alcune utili query per farlo.


     


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    mercoledì 23 novembre 2011 14:52
  • Ho fatto lo essempio con sp_monitor ma veramente vorrei fare questo :

     

     

    Craete Procedure Tester1

    As Begin

     Select campo1 campo 2 from table1

    Select campo1 campo2 campo3 from table2

    End

     

    Create Procedure CalcolateTables

    as

    begin

     Declare @factorCursor1 as int, @FactorCursor2  as int 

      set @factorCursor1 = Select max(campo2) From (   exec dbo.tester1()!cursor_table1)

      set @factorCursor2 = Select max(campo2) From ( exec dbo.tester1()!cursor_table2)

     Select @factorCursor1, @FactorCursor2 

     

    end

     

     

     

    La mia versione di SQL Server e Sql Server 2008. e da un bell po che sto cercando questa soluzione perche ho tante stored all'interno del mio server che non vorrei creare altre stored separate si ho gia le informazione in una stored di reportistica ... quindi su oracle si puo leggere delle stored che restituiscono reference cursors ma io non vorrei dependere di VS per fare un lavoro di calcolo che dovrei fare a livello di database...

     

    venerdì 25 novembre 2011 16:45
  • Ciao Cesar,

    in SQL Server non hai i reference cursors come Oracle, ma puoi risolvere memorizzando il risultato della stored procedure in una variabile di tipo table (o una tabella temporanea), in questo modo:

     

    CREATE PROCEDURE Tester1
    AS
    SET NOCOUNT ON

     SELECT Campo1, Campo2, 'Stringa' FROM Table1 UNION SELECT Campo1, Campo2, Campo3 FROM Table2 GO CREATE PROCEDURE CalcolateTables AS SET NOCOUNT ON

    DECLARE @tempTbl TABLE ( Campo1 int, Campo2 varchar(50), Campo3 varchar(255) ) INSERT INTO @TempTbl EXEC Tester1 SELECT * FROM @TempTbl GO EXEC CalcolateTables

    HTH

     


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    venerdì 25 novembre 2011 19:19
  • Ciao Cesar,

    Sei riuscito a dare uno sguardo all’ultimo post di Danilo? Potresti per cortesia farci sapere se ti ha aiutato a risolvere?

     

    Grazie in anticipo per la tua risposta,


    Irina Turcu

    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.

    LinkedIn

    giovedì 8 dicembre 2011 12:07