Con più domande
Come Leggere una Stored Con Multiple Resultsets da Un'altra Stored Procedure

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
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 -
-
-
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. -
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...
-
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.- Modificato Danilo DominiciMVP venerdì 25 novembre 2011 19:20
-
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.