CLAUSOLA IN NELLE STORED PROCEDURE

mercoledì 10 marzo 2004 - 23.28

mo70 Profilo | Junior Member

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

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

> 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
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