Ritorno di Table da una stored

martedì 27 maggio 2008 - 17.43

squilibrium Profilo | Junior Member

Ciao a tutti

qualcuno sa come è possibile far tornare un parametro di tipo "Table" da una stored procedure con sql server 2005?

Grazie

alx_81 Profilo | Guru

>Ciao a tutti
Ciao!
>
>qualcuno sa come è possibile far tornare un parametro di tipo
>"Table" da una stored procedure con sql server 2005?
SQL Server 2005 non supporta il passaggio di parametri di tipo table.
Ti consiglio di fare una stored procedure che alla fine fa una SELECT che ti torna un resultset da gestire come se fosse effettivamente una tabella

Al contrario, SQL Server 2008 consentirà il passaggio di parametri di tipo TABLE.
>
>Grazie
di nulla!

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

Quindi è possibile far tornare una Table da un funzione ma non da una stored?

alx_81 Profilo | Guru

>Quindi è possibile far tornare una Table da un funzione ma non
>da una stored?
una funzione torna una TABLE perchè è una TABLE VALUED FUNCTION. Torna proprio la table.
I parametri delle stored procedure non possono essere mai TABELLE fino alla versione 2005 compresa. Da 2008 (READONLY) ma si potranno avere.

Se a te serve una table da utilizzare all'interno di una logica (join, altre query, subquery, ecc) devi usare la funzione, oppure capire se ci sono altre strade. Prova ad illustrare la situazione reale, quello che devi fare. Magari si può seguire un'altra strada..

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrium Profilo | Junior Member

In realtà il problema è gia stato risolto ma la curiosità mi era rimasta..

Una collega stava modificando una function che aveva una table come valore di ritorno ma le modifiche che doveva fare in realtà non erano adatte ad una funzione in quanto scriveva e leggeva da diverse tabelle del DB e creava delle tabelle temporanee (cosa non permessa in una function).

Le ho suggerito di convertire la funzione in una stored ma ovviamente al momento di ritornare il valore non consentiva il ritorno di una table.
Alla fine è stata costretta a tornare un set di dati, dall'esterno si richiama la stored e inserisce il risultato su una variabile di tipo Table.

Mi sono però continuato a domandare perchè non fosse possibile tornare una table da una stored mentre da una function si.

Se hanno integrato questa funzionalità in Sql Server 2008 suppongo che sia semplicemente una carenza del 2005

grazie

alx_81 Profilo | Guru

>Mi sono però continuato a domandare perchè non fosse possibile
>tornare una table da una stored mentre da una function si.
>Se hanno integrato questa funzionalità in Sql Server 2008 suppongo
>che sia semplicemente una carenza del 2005
No no, il problema è diverso..
la funzione che torna una TABLE viene usata proprio come tabella all'interno dei nostri statement sql. E poi una funzione è un sottoprogramma fatto proprio per "RITORNARE" qualcosa. Infine con la funzione non puoi fare modifiche sugli oggetti.

Una stored procedure è proprio un'altra cosa. Non è fatta per quello. Intanto non "torna" qualcosa (se non un intero che è il risultato - 0 tutto ok, o numero di errore). E' proprio un sottoprogramma che "fa qualcosa" e può anche modificare dati e strutture. Poi puoi decidere di utilizzare dei parametri di output, ma quello non è il ritorno della stored procedure, si tratta di passaggio di parametri.

In SQL Server 2008, i parametri di tipo table sono READONLY (va proprio indicato), questo significa che puoi solo passarlo per consumarlo all'interno della procedura.

>
>grazie
di nulla!

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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