Discussione:
Select da stored procedure
(troppo vecchio per rispondere)
Luigi
2006-02-03 15:41:57 UTC
Permalink
Ciao a tutti,
ho una stored procedure composta da diverse UNION di varie Select che
estraggono dati da diverse tabelle.

Vorrei fare una select sul risultato di questa stored procedure, del tipo:

select * from
dbo.up_ReportCOMPLETO 'ita', 0
where level1=1

dove level1 è un campo restituito da questa sp.
Ma così non funziona.
Come si può fare?
Grazie
Lorenzo Benaglia
2006-02-03 15:56:16 UTC
Permalink
Post by Luigi
select * from
dbo.up_ReportCOMPLETO 'ita', 0
where level1=1
dove level1 è un campo restituito da questa sp.
Ma così non funziona.
Come si può fare?
Ciao Luigi,

non puoi interrogare in quel modo il restult set restituito da una stored
procedure.
Ti propongo 2 alternative:

1) Dichiari una tabella avente la stessa struttura del result set restituito
dalla stored procedure, la popoli con in comando INSERT...EXEC e la
interroghi applicando i filtri che vuoi;

2) Butti la stored procedure e la riscrivi sottoforma di user-defined
function table-valued che puoi interrogare tramite SELECT.

Il ng è pieno zeppo di esempi e trovi tutti i dettagli sui Books Online.
Post by Luigi
Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
Luigi
2006-02-07 08:33:27 UTC
Permalink
Grazie Lorenzo e Andrea, in effetti mi sembra troppo facile eseguire una
Select sul risultato di una stored procedure ;-)
(purtroppo con le funzioni non sono molto avvezzo).
Post by Lorenzo Benaglia
Post by Luigi
select * from
dbo.up_ReportCOMPLETO 'ita', 0
where level1=1
dove level1 è un campo restituito da questa sp.
Ma così non funziona.
Come si può fare?
Ciao Luigi,
non puoi interrogare in quel modo il restult set restituito da una stored
procedure.
1) Dichiari una tabella avente la stessa struttura del result set restituito
dalla stored procedure, la popoli con in comando INSERT...EXEC e la
interroghi applicando i filtri che vuoi;
2) Butti la stored procedure e la riscrivi sottoforma di user-defined
function table-valued che puoi interrogare tramite SELECT.
Il ng è pieno zeppo di esempi e trovi tutti i dettagli sui Books Online.
Post by Luigi
Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
Andrea Montanari
2006-02-03 16:04:49 UTC
Permalink
salve Luigi,
Post by Luigi
Ciao a tutti,
ho una stored procedure composta da diverse UNION di varie Select che
estraggono dati da diverse tabelle.
select * from
dbo.up_ReportCOMPLETO 'ita', 0
where level1=1
dove level1 è un campo restituito da questa sp.
Ma così non funziona.
Come si può fare?
Grazie
se puoi modificare il tuo disegno da una procedura ad una funzione utente,
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_create_7r1l.asp,
puoi tranquillamente sfruttarne le potenzialita' in tal senso..
USE tempdb;
GO
CREATE TABLE dbo.tb (
ID int NOT NULL PRIMARY KEY ,
Dati varchar(10)
);
INSERT INTO dbo.tb VALUES ( 1 , 'Gianluca' );
INSERT INTO dbo.tb VALUES ( 2 , 'Luca' );
INSERT INTO dbo.tb VALUES ( 3 , 'Lorenzo' );
INSERT INTO dbo.tb VALUES ( 4 , 'AndreaB' );
INSERT INTO dbo.tb VALUES ( 5 , 'AndreaM' );
GO
CREATE FUNCTION dbo.udf_GetNome (
@id int = 0
) RETURNS TABLE
AS
RETURN (SELECT Id, Dati FROM dbo.tb WHERE ID >= @id )

GO
SELECT * FROM dbo.udf_GetNome(2);
SELECT * FROM dbo.udf_GetNome(2) WHERE Dati <> 'Lorenzo';
GO
DROP FUNCTION dbo.udf_GetNome ;
DROP TABLE dbo.tb;

diversamente dovresti passare per una stored procedure che faccia da wrapper
alla procedura da te correntemente utilizzata che utilizzi una tabella
temporanea da filtrare come da te desiderato..
saluti
--
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz/DbaMgr.shtm http://italy.mvps.org
DbaMgr2k ver 0.16.0 - DbaMgr ver 0.61.0
(my vb6+sql-dmo little try to provide MS MSDE 1.0 and MSDE 2000 a visual
interface)
--------- remove DMO to reply
Loading...