Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
CLAUSOLA IN NELLE STORED PROCEDURE
mercoledì 10 marzo 2004 - 23.28
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mo70
Profilo
| Junior Member
54
messaggi | Data Invio:
mer 10 mar 2004 - 23:28
Ciao a tutti,
sapete dirmi come si utilizza la clausola IN all'interno di una stored procedure con parametro? Il parametro in questione si chiama @pr e il suo valore deriva da una listbox a selezione multipla (esattamente un elenco di province). Premetto che utilizzo asp.net e un database di access. Devo fare un loop per ottenere la stringa dei valori selezionati nella listbox oppure con asp.net esiste un metodo più semplice? E' possibile utilizzare IN anche con il valore % oppure devo per forza usare like?
Grazie
Ciao
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 11 mar 2004 - 21:34
Ciao,
allora puoi passare valori fissi come in questo caso:
select * from impiegati where employeeID in (102,103)
oppure:
select * from impiegati where nome in ('Alberto','Giovanni')
oppure ancora usare un'altra query:
select * from impiegati where nazioneID in (select nazioneID from nazioni)
ciao
david
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
sab 20 mar 2004 - 18:07
> sapete dirmi come si utilizza la clausola IN all'interno di una stored procedure con parametro?
Ciao mo70,
la versione attuale di SQL Server non permette di passare un vettore/collection come parametro di una stored procedure.
Genralmente in questi casi viene consigliato di passare un parametro stringa, contenente un elenco di valori separati da un certo carattere (in genere la virgola).
A questo punto puoi comporre la SELECT concatenando il parametro ed eseguire il tutto tramite il comando EXEC oppure utilizzando la stored procedure di sistema sp_executesql.
Questa tecnica prende il nome di Dynamic SQL in quanto la query viene generata al volo di volta in volta. Purtroppo oltre ad essere molto meno efficiente rispetto ad una sp precompilata, è anche una soluzione potenzialmente pericolosa in quanto giocando con i parametri di input si possono creare comandi SQL pericolosi (ad es. si può valorizzare un parametro con un bel "; DROP TABLE <nome tabella>" e se il dba non ha provveduto a limitare le permission dell'account, si andrà ad eliminare una tabella dal db :-\).
Per maggiori info ti segnalo questi meravigliosi articoli del SQL Server MVP Erland Sommarskog:
"The Curse and Blessings of Dynamic SQL"
http://www.algonet.se/~sommar/dynamic_sql.html
"Arrays and Lists in SQL Server"
http://www.algonet.se/~sommar/arrays-in-sql.html
Per risolvere il tuo problema in modo molto più elegante ed efficiente, puoi seguire i consigli di altri due SQL Server MVP: Narayana Vyas Kondreddi e Fernando G. Guerrero:
"How to pass a list of values or array to SQL Server stored procedure?"
http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
"Passing Multivalued Variables to a Stored Procedure"
http://tinyurl.com/i0lo
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
Torna su
Stanze Forum
Elenco Threads
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 !