SSIS - creare script vp.net personalizzato per fare UPDATE su una tabe...

giovedì 15 novembre 2007 - 16.17

roddik1980 Profilo | Junior Member

Salve a tutti,

vorrei risolvere il quesito descritto sotto tramite uno script vb.net da eseguire in SSIS.

Lo scopo è popolare il campo idClasse della Tabella1 prendendolo dalla Tabella3 passando per la Tabella2 !
Non posso usare il campo Classe come chiave perchè contiene strani caratteri e non mi sento sicuro.

Tabella1: idArticolo (campo popolato), DescrizioneArticolo (campo popolato), idClasse (campo non popolato).
Tabella2: idArticolo (campo popolato), Classe (campo popolato).
Tabella3: idClasse (campo popolato), Classe (campo popolato).

1) Dalla Tabella1 creo tramite istruzione SQL un recordset o dataset (RST1) contenente gli "idArticolo".

2) Ora devo scorrere/leggere tutto il recordset (RST1) con un ciclo Do Until o altro ciclo simile l' importante è scorrere tutto il RST1 fino alla fine.

3) Devo ricercare ogni idArticolo che scorro all' interno della "Tabella2" e farmi restituire il valore del campo Classe corrispondente all' idArticolo che sto leggendo.

4) Prendo il valore del campo classe restituitomi e lo vado a ricercare nella "Tabella3" e mi faccio restituire l' idClasse.

5) Aggiorno il campo idClasse della Tabella1 col valore ricavato dalla Tabella3.

Qualcuno mi può aiutare per favore anche allegandomi un esempio di pacchetto script se possibile ?!

Grazie e buona serata.

Mark

lbenaglia Profilo | Guru

>Qualcuno mi può aiutare per favore anche allegandomi un esempio
>di pacchetto script se possibile ?!

Ciao Mark,

Ma perché mai complicarsi la vita quando esistono soluzioni set-based che offrono semplicità e prestazioni nemmeno lontanamente paragonabili alla montagna di codice che vorresti scrivere?
Ti bastano 1 comando di UPDATE e 2 JOIN:

USE tempdb; CREATE TABLE dbo.Tabella1( idArticolo int NOT NULL, DescrizioneArticolo varchar(10) NOT NULL, idClasse int NULL ); CREATE TABLE dbo.Tabella2( idArticolo int NOT NULL, Classe varchar(10) NOT NULL ); CREATE TABLE dbo.Tabella3( idClasse int NOT NULL, Classe varchar(10) NOT NULL ); INSERT dbo.Tabella1 VALUES(1, 'Articolo1', NULL); INSERT dbo.Tabella1 VALUES(2, 'Articolo2', NULL); INSERT dbo.Tabella1 VALUES(3, 'Articolo3', NULL); INSERT dbo.Tabella1 VALUES(4, 'Articolo4', NULL); INSERT dbo.Tabella2 VALUES(1, 'Classe1'); INSERT dbo.Tabella2 VALUES(2, 'Classe2'); INSERT dbo.Tabella2 VALUES(3, 'Classe3'); INSERT dbo.Tabella2 VALUES(4, 'Classe4'); INSERT dbo.Tabella3 VALUES(10, 'Classe1'); INSERT dbo.Tabella3 VALUES(20, 'Classe2'); INSERT dbo.Tabella3 VALUES(30, 'Classe3'); INSERT dbo.Tabella3 VALUES(40, 'Classe4'); UPDATE dbo.Tabella1 SET idClasse = T3.idClasse FROM dbo.Tabella1 AS T1 JOIN dbo.Tabella2 AS T2 ON T1.idArticolo = T2.idArticolo JOIN dbo.Tabella3 AS T3 ON T2.Classe = T3.Classe; SELECT * FROM dbo.Tabella1; /* Output: idArticolo DescrizioneArticolo idClasse ----------- ------------------- ----------- 1 Articolo1 10 2 Articolo2 20 3 Articolo3 30 4 Articolo4 40 (4 row(s) affected) */ DROP TABLE dbo.Tabella1, dbo.Tabella2, dbo.Tabella3;

>Grazie e buona serata.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5