Scomporre un campo nvarchar andando ad incerterre un valore specifico

mercoledì 18 febbraio 2009 - 12.49

perla0279 Profilo | Senior Member

ciao

devo scomporre un valore che mi entra da una storeprocedure.
Il valore è @cod varchar (300)
è viene valorizzato come 63,15,26,58,14

La select di estrazione è :
Select codice, paese from ci where codice in( @cod )

codice è un parametro Int all'interno del database.


Dovrei scomporre la stringa in entrata @cod , andando a crearmi dei valori da inserire all'interno della mia select in modo da far funzionare il tutto, ho provato in diversi modi ma senza riuscirci e non so come fare ........

Spero di essere stata chiara nella spiegazione.

alx_81 Profilo | Guru

>ciao
Ciao

>devo scomporre un valore che mi entra da una storeprocedure.
>Il valore è @cod varchar (300)
>è viene valorizzato come 63,15,26,58,14
>La select di estrazione è :
>Select codice, paese from ci where codice in( @cod )
>codice è un parametro Int all'interno del database.

>Dovrei scomporre la stringa in entrata @cod , andando a crearmi
>dei valori da inserire all'interno della mia select in modo da
>far funzionare il tutto, ho provato in diversi modi ma senza
>riuscirci e non so come fare ........
Puoi seguire un pochino di strade. Il più semplice è SQL dinamico e quindi la creazione dinamica della where per poi eseguire la stringa creata con sp_executeSQL.
Altrimenti potresti splittare la stringa per inserire in una tabella temporanea n record (tanti quanti sono i valori separati da ",") ed infine metterla in join su quel campo per scremare i valori.

--

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

perla0279 Profilo | Senior Member

ok
penso che proverò a prendere la prima strada .....
ho scelto quella perchè per me è un metodo nuovo e voglio imparare........

Mi sono documentata un pò.

Il problema però persiste..... ho scritto questo

--exec RPT '63,130,140'
ALTER PROCEDURE [dbo].[RPT]
@Buyer nvarchar (1000)


AS

DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT * from fg010 '
+ ' WHERE buyer in (' + '@EmployeeID' + ')'
EXEC sp_executesql
@stmt = @SQL,
@params = N'@EmployeeID int',
@EmployeeID = @Buyer


così non la esegue perchè il parametro in ingresso è una stringa mentre l'altro è un intero..........

Poi ho provato così:
--exec RPT '63',130,140'
ALTER PROCEDURE [dbo].[RPT]
@Buyer nvarchar (1000)


AS

DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT * from fg010 '
+ ' WHERE buyer in (' + '@EmployeeID' + ')'
EXEC sp_executesql
@stmt = @SQL,
@params = N'@EmployeeID varchar',
@EmployeeID = @Buyer

così non mi ritorna nulla...... peche non lo vede nella maniera coretta.



Non so come fare io dovrei inserire '63,130,140' dentro al posto di '@EmployeeID' facendo in modo che veda i valori come numerici quindi mi deve cercare 63 130 140
WHERE buyer in (' + '@EmployeeID' + ')'

alx_81 Profilo | Guru

Non devi usare le apici per la concatenazione. Eccoti un esempio:

CREATE PROCEDURE dbo.proc_creaSQL @EmployeeIDs nvarchar(MAX) AS BEGIN SET NOCOUNT ON; DECLARE @sql nvarchar(MAX) SET @sql = 'SELECT * FROM Tabella WHERE EmployeeID IN (' + @EmployeeIDs + ')' PRINT @sql END exec dbo.proc_creaSQL '1,2,3,4,5'
--

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

perla0279 Profilo | Senior Member

ottimo
adesso penso di aver capito...........
ultima cosa anche se sembra banale ma non mi viene

nella where devo inserire anche questi parametri:
and a.MODULO = '9991'
and a.codpro <> 'D'and a.codpro <> 'ELIMINATO'

non riesco a fare in modo che la costruzione di query mi inserisca per esempio 9991 tra apici ( '9991' ) in modo da vederlo come stringa...........

Devo forse crearmi dei parametri e se si non mi è ancora chiaro come faccio ad inserirne più di uno....
mi verrebbe da dire
@ param = N'@EmployeeID1 varchar'
@param2 =N'@EmployeeID2 varchar'
@param3 =N'@EmployeeID3 varchar'

@EmployeeID1 = '9991'
@EmployeeID2 = 'D'
@EmployeeID3 = 'ELIMINATO'

che dici potrebbe andare cos'..............

poi quando chiamo la procedura immagino daver inserire tutti i parametri

exec sp_executesql @EmployeeID1, @EmployeeID2, @EmployeeID3
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