[SQL 2005] tabella join con storedprocedure, come faccio una select da...

mercoledì 11 novembre 2009 - 17.52

Gluck74 Profilo | Guru

ci sto ammattendo da 2 giorni!!!!!

ho fatto una bellissima stored procedure che mi va una bellissima PIVOT.
Il risultato èuna tabella con:
idprodotto, campo1, campo2, campo3

ora vorrei metterla in join con la tabella originale dei prodotti per avere una bella vista con tutti i campi che mi servono, compresi diversi lookup.

come diavolo si fa?
select * from (exec nomeSP) as sp
non funziona, e così altri 100 tentativi che ho fatto.

qualcuno mi sa dare un metodo valido????

grazie

lbenaglia Profilo | Guru

>ora vorrei metterla in join con la tabella originale dei prodotti
>per avere una bella vista con tutti i campi che mi servono, compresi
>diversi lookup.
>
>come diavolo si fa?
>select * from (exec nomeSP) as sp
>non funziona, e così altri 100 tentativi che ho fatto.
>
>qualcuno mi sa dare un metodo valido????

Ciao Glauco,

Non è possibile specificare una stored procedure dopo la clausola FROM.
Per raggiungere il tuo scopo puoi trasformare la sp in una UDF (sempre che siano rispettati i vincoli di queste ultime) oppure popolare una tabella (eventualmente temporanea locale definita nel contesto del comando di SELECT o globale) con l'output generato dalla sp.

>grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Gluck74 Profilo | Guru

ciao lbenaglia,

ho provato a trasformare la SP in una funzione, ma mi da errore perché all'interno ci sono delle istruzioni
DECLARE @nomeVar .........

in effetti sarebbe la cosa più giusta creare una funzione che ritorna una tabella, ma non ci sono riuscito, come posso fare?

Ho anche provato a fare una
exec nomeMySP dentro una function per restituire la tabella di risultati, ma niente.

mi dai una mano?

lbenaglia Profilo | Guru

>ho provato a trasformare la SP in una funzione, ma mi da errore
>perché all'interno ci sono delle istruzioni
>DECLARE @nomeVar .........
Una Multistatement Table-valued Function permette la definizione di variabili.

>in effetti sarebbe la cosa più giusta creare una funzione che
>ritorna una tabella, ma non ci sono riuscito, come posso fare?
Senza un esempio completo la vedo dura suggerirti la soluzione completa.

>Ho anche provato a fare una
>exec nomeMySP dentro una function per restituire la tabella di
>risultati, ma niente.
Non puoi eseguire una sp nel body di una udf.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Gluck74 Profilo | Guru

>Una Multistatement Table-valued Function permette la definizione
>di variabili.
>
mi aiuteresti a farla? non sono per niente capace. Ma se non sbaglio devi definire le colonne a priori.
invece le colonne della PIVOT sono calcolate in base ai dati sul DB

>Senza un esempio completo la vedo dura suggerirti la soluzione
>completa.
se ti serve io ti passo l'intera SP, ma il mio problema non è la SP in se, ma il fatto che la PIVOT che ritorna, la devo mettere in qualche modo in join con un'altra tabella all'interno di una view. (sempre che sia la strada giusta).

>Non puoi eseguire una sp nel body di una udf.
he he, me ne sono accorto.

io non so più dove sbattere la testa.
Mi dai un consiglio su come risolvere questa cosa?

in pratica: ho una tabella prodotti. per ogni prodotto esistono da 0 a n record in un'altra tabella che definisce i limiti di utilizzo.
la join sarebbe:

1, office, limite utenti, 5
2, acrobat, limite computer, 10
3, IBM, limite server, 100
4, IBM, limite utenti, 5000
5, ciccio, limite x, 3
6, ciccio, limite y, 4

la pivot invece:
prodotto, limite utenti, limite computer, limite server, limite x, limite y
office , 5 , null , null , null , null
acrobat , null , 10 , null , null , null
IBM , 5000 , null , 100 , null , null
ciccio , null , null , null , 3 , 4



bene, questo viene calcolato appunto dalla mia SP, dove i campi limite sono calcolati in base ad una lista presente in un'altra tabella. (non sono fissi)

Quello che voglio fare io è prendere questa PIVOT e metterla in join con la tabella prodotti per avere il report completo dei prodotti con i propri limiti.

come posso fare????
posso usare le tabelle temporanee? in che modo?
portano problemi? se vengono fatte due richieste contemporanee, si rompe qualcosa?


ciao grazie

prassitele Profilo | Newbie

Ciao, Gluck.
Se mi scrivi la Stored e mi indichi il tracciato record della Tabella Prodotti, posso provare a scriverti la Function a valori Tabella che può risolverti il problema.
In ogni caso, io suggerirei di non mettere questa Function in Join con una Vista ma di creare una Function a valori tabella dedicata al risultato che devi ottenere; secondo me dovrebbe essere più efficiente.

Attendo tue nuove.

Ciao.

Prassitele

Gluck74 Profilo | Guru

Alla fine ho risolto componendo una mega string con tutta la query dentro.

Il mio problema era che non sapevo a priori le colonne, quindi dovevo ricavarle sul momento.

ciao e grazie
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5