DECLARE CURSOR - Conversione VARCHAR in una lista di INT ... strano lo...

martedì 24 maggio 2011 - 12.45
Tag Elenco Tags  SQL Server 2008 R2  |  SQL Server 2008  |  SQL Server 2005  |  SQL Server 2000  |  SQL Server Express  |  MSDE

sacsacsac Profilo | Newbie

Ciao a tutti,
in pasto ad una mia stored procedure ho un parametro definito VARCHAR(MAX) che indica una lista di IDAlunni separati da una virgola.

Esempio: Exec sp_LoadAlunni '01,03,06,11,22, 13,1122'.

IDAlunni, nella tabella, corrisponde ad un campo di tipo int.

Ad un certo punto della stored mi dichiaro un cursore, ma non riesco a convertire il varchar in una lista di int adatta ad eseguire la clausola IN nell'istruzione di SELECT del cursore che di seguito riporto:

DECLARE CurAlunni CURSOR FOR SELECT * FROM Alunni WHERE IdAlunno IN ( @idalunni)

Sapreste indicarmi una soluzione per ovviare al mio problema?

Spero di essere stato chiaro.

PS: utilizzo SQL SERVER 2008 Express Edition

Grazie 1000
Ciao

lbenaglia Profilo | Guru

>Sapreste indicarmi una soluzione per ovviare al mio problema?
>
>PS: utilizzo SQL SERVER 2008 Express Edition

Ciao,

Visto che utilizzi SQL Server 2008 potresti risolvere elegantemente il problema ricorrendo ai Table-Valued Parameters:
http://msdn.microsoft.com/en-us/library/bb510489.aspx

Con le edizioni precedenti potresti adottare questa tecnica proposta da Fernando:
https://groups.google.com/group/microsoft.public.it.sql/msg/996f270c0984d7d5?hl=it

>Grazie 1000
Prego.

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

sacsacsac Profilo | Newbie

Grazie per la risposta.

Ho capito questo:
all'interno del DB mi creo il mio TYPE Table-Valued che poi sarà passato come parametro alla stored e andrà utilizzato nello statement di SELECT del cursore sempre all'interno della stored.

Ma come la popolo dall'esterno ossia dalla mia applicazione .NET? Esiste un type analogo nel .NET framework ?

Siccome sto testando lo sviluppo da Management Studio, come faccio a popolarmi per il test tale Table-Valued (con una banale INSERT)?

Grazie

lbenaglia Profilo | Guru

>Grazie per la risposta.
>
>Ho capito questo:
>all'interno della stored mi creo una Table-Valued che poi andrà
>utilizzata nello statement di SELECT del cursore.
>
>Se è così non so come popolarla!
Popolarla da T-SQL o dall'applicativo client?
Qui trovi i dettagli utilizzando ADO.NET:
http://msdn.microsoft.com/en-us/library/bb675163.aspx

>Grazie
Prego.

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

sacsacsac Profilo | Newbie

Perfetto ti ringrazio penso di aver capito.

thx

lbenaglia Profilo | Guru

>Popolarla da T-SQL mi sembra con le INSERT.
>
>Dalla mia applicazione non saprei come.
I due link che ti ho segnalato ti illustrano entrambe le cose.

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

sacsacsac Profilo | Newbie

si si ...
Grazie infinite
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5