Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET]Passaggio valore Stored procedure a IN

Salve a tutti,
sql server 7 e 2000,
ho una Stored procedure
CREATE   PROCEDURE spCorsi
@INN varchar(300)
AS
SELECT ID ................  
 (ID IN (@INN)
'codice
par(0) = New SqlClient.SqlParameter("@INN", SqlDbType.VarChar, 300)
par(0).Value = matrice
la matrice di valori da passare a IN è una serie di numeri tipo
"2,22,34,78"
ma può essere uno solo.
E' possibile passargli una stringa come sopra e come ?
Ave
giuseppeD
---
CCR
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 (ID IN (@INN)
Non credo che questa cosa funzioni.
Cioč, il tuo problema non č un problema di VB (da vb puoi passare tutti i 
parametri che vuoi ad una SP, sia realizzando una stringa concatenando 
l'EXEC con i parametri formattati e separati correttamente, sia attraverso 
la collection Parameters del Command), ma un problema di Sql-Server.
Se esegui, da query analyzer:
EXEC [dbo].[spCorsi] '1,20,30,50'
la SP funziona come tu desideri??
Con quella select, non credo.
Quello che puoi usare (anche se diventa una mezza castrazione quanto ad 
efficienza), č il Dynamic Sql, ossia comporre la query all'interno della SP, 
mediante una cosa del tipo
   CREATE PROCEDURE general_select @tblname nvarchar(127),
                                   @key     key_type AS -- key_type is 
char(3)
       EXEC('SELECT col1, col2, col3
             FROM ' + @tblname + '
             WHERE keycol = ''' + @key + '''')
Ciao
Alberto
-- 
E tutto mi sembrava andasse bene... 

 ha scritto nel messaggio 
news:d582pn$doi$1...@area.cu.mi.it...
[taglio]
Scrivo la Stored di prova:
ALTER PROCEDURE spProvaSelectIN
@INN varchar(300)
AS
SELECT * FROM orders WHERE OrderID IN(@INN)
CON
EXEC [dbo].[spCorsi] '1,20,30,50'
Non funziona, ottengo il seguente messaggio:
È stato rilevato un errore di sintassi durante la conversione del valore 
varchar '' + @INN + '' in una colonna di tipo int.
ho provato da 
vb.net
 il seguente
Dim val As String = "10248','10253','10256','10260"
Dim par(0) As SqlClient.SqlParameter
par(0) = New SqlClient.SqlParameter("@INN ", SqlDbType.VarChar, 300)
par(0).Value = val
ottengo il seguente messaggio:
"È stato rilevato un errore di sintassi durante la conversione del valore 
varchar '10248','10253','10256','10260' in una colonna di tipo int."
ho provato a mettere apicetti prima e dopo @INN nella Stored,
nulla
Provando la seguente con query analyzer, funziona.
SELECT * FROM orders WHERE OrderID IN('10248','10253','10256','10260')
i numeri racchiusi negli apicetti li converte in int ?
devo concludere che non è possibile passare al parametro
@INN
un valore come
'10248','10253','10256','10260'
da codice 
VB.NET


 ?
il problema non e` 
vb.net
, ma il fatto che @INN e` *un* valore,
non *una serie* di valori, come vorresti fare tu.
temo che ti tocchi costruire la stringa sql a runtime
e passarla a sp_executesql (se esiste ancora, non ricordo)
se il numero di parametri opzionali fosse limitato ed il massimo
noto a priori potresti ricorrere a parametri opzionali e nella
WHERE dimenticare la IN ed usare l' OR in questo modo:
/* ipotizziamo 4 parametri */
WHERE
(@par1 IS NULL OR colonna = @par1) OR
(@par2 IS NULL OR colonna = @par2) OR
(@par3 IS NULL OR colonna = @par3) OR
(@par4 IS NULL OR colonna = @par4)
-- 
ciao, hal

 da codice 
VB.NET
Puoi ripetere la stessa domanda mille volte.
La risposta te l'ho già data.
L'esempio te l'ho già postato.
E il riferimento da cercare (dynamic sql) te l'ho già dato.
Quindi, se vuoi risolvere il tuo problema, hai tutti gli elementi per 
proseguire il tuo studio.
Se invece speri che, ripetendo la stessa domanda, prima o poi qualcuno ti 
dica che esiste un altro modo... beh, non sperarci troppo.
