Newsgroup: it.comp.software.database
Titolo: Stored dentro una Stored

Salve a tutti.
Ecco il mio problema.
Ho due query. Da queste realizzo una Stored che sostanzialmente fa una UNION
ALL delle prime due.
PRima domanda: per fare una query di unione devo per forza fare una stored
procedure oppure posso realizzare unavista che sia l'unione delle prime due?
Ho provato a realizzare una vista ma mi da errore.
Seconda domanda: compatibilmente con la risposta precedente se dovessi
realizzare una SP se la successiva Stored la dovessi basare sulla stored
appena creata come devo fare? E fattibile? Se si come? Oppure non posso?
Stranamente ho provato a realizzare nella mia stored una select * from
sp_pippo ma mi dice che sp_pippo non è un oggetto conosciuto.
Grazie a tutti
DD

 ha scritto nel messaggio
news:tJ0F9.27533$3l.7...@twister1.libero.it...


 sp_pippo ma mi dice che sp_pippo non è un oggetto conosciuto.
Ti conviene usare una funzione o una vista, non mi sembra si possa usare una
SP così semplicemente da una select (o forse non si può proprio fare ??)
Ciao.

 sp_pippo ma mi dice che sp_pippo non č un oggetto conosciuto.
Non e' possibile usare la stored procedure direttamente nella
clausola di FROM come hai cercato di fare.
Hai pero' la possibilita' di appoggiari ad una tabella temporanea
come in questo esempio:
--<CUT HERE>--
CREATE PROCEDURE dbo.GetRubricaClienti
AS
SELECT CompanyName, Phone
FROM Northwind.dbo.Customers
GO
CREATE PROCEDURE dbo.GetRubricaSpedizionieri
AS
SELECT CompanyName, Phone
FROM Northwind.dbo.Shippers
GO
CREATE PROCEDURE dbo.GetRubricaFornitori
AS
SELECT CompanyName, Phone
FROM Northwind.dbo.Suppliers
GO
CREATE PROCEDURE dbo.GetRubrica1
AS
CREATE TABLE #tmpRubrica (
 CompanyName nvarchar(40) NOT NULL,
 Phone  nvarchar(24) NOT NULL
)
INSERT #tmpRubrica
EXEC dbo.GetRubricaClienti
INSERT #tmpRubrica
EXEC dbo.GetRubricaSpedizionieri
INSERT #tmpRubrica
EXEC dbo.GetRubricaFornitori
SELECT *
FROM #tmpRubrica
ORDER BY
  CompanyName
GO
EXEC dbo.GetRubrica1
GO
--<CUT HERE>--
Attenzione pero' al fatto che al complicarsi della
stored procedure, l'utilizzo di tabelle temporanee
potrebbe determinare la ricompilazione del piano
di esecuzione della procedura (riducendo le prestazioni).
Un'altra tecnica, come gia' suggerito, e' quella di
utilizzare le User Defined Functions (solo a partire da
SQL Server 2000), come in questo esempio:
--<CUT HERE>--
CREATE FUNCTION dbo.RubricaClienti()
RETURNS TABLE
AS
RETURN(
 SELECT CompanyName, Phone
 FROM Northwind.dbo.Customers
)
GO
CREATE FUNCTION dbo.RubricaSpedizionieri()
RETURNS TABLE
AS
RETURN(
 SELECT CompanyName, Phone
 FROM Northwind.dbo.Shippers
)
GO
CREATE FUNCTION dbo.RubricaFornitori()
RETURNS TABLE
AS
RETURN(
 SELECT CompanyName, Phone
 FROM Northwind.dbo.Suppliers
)
GO
CREATE PROCEDURE dbo.GetRubrica2
AS
SELECT *
FROM dbo.RubricaClienti()
UNION
SELECT *
FROM dbo.RubricaSpedizionieri()
UNION
SELECT *
FROM dbo.RubricaFornitori()
ORDER BY
  CompanyName
GO
EXEC dbo.GetRubrica2
GO
--<CUT HERE>--
Nota: in quest'ultimo caso potresti fare anche una
semplice vista con la UNION delle selezioni dalle
varie UDFs.
Ciao,
-- 
Gianluca Hotz
Backoffice MVP (SQL Server) MCP SQL Server and MCP Windows
Vice-President of the Italian User Group for SQL Server
Founding Member of the Italian User Group for .NET
http://www.ghotz.com
http://www.ugiss.org