s_dimaio wrote:
Il mio problema è esattamento questo: non so quale campo della
"Tabella 2" devo aggiornare, dipende da quanto scritto nella "Tabella
1". Le due tabelle hanno una struttura del tipo:
Tabella1:
CampoUpd......Valore
-------------------------
Campo1..........0.01
Campo2..........0.05
Campo3..........0.08...questa è una struttura plausibile...
Tabella2:
Campo1........Campo2........Campo3
-----------------------------------
0.01
.........................0.05
............................................0.08...ma questa ho il forte sospetto che non sia esattamente così. Vuoi farmi
credere che la tabella contiene i record
0.01 NULL NULL
NULL 0.05 NULL
NULL NULL 0.08
???
Se le cose stanno così prima di tutto prendi a sassate chi ha disegnato una struttura simile...
Partiamo quindi con il definire la struttura e i dati così come li hai riportati
========================
CREATE TABLE dbo.Tabella1
(
Campo varchar(10) NOT NULL,
Valore decimal (9, 2) NOT NULL
)
GO
CREATE TABLE dbo.Tabella2
(
Campo1 decimal(9, 2) NULL,
Campo2 decimal(9, 2) NULL,
Campo3 decimal(9, 2) NULL
)
GO
INSERT dbo.Tabella1 VALUES('Campo1', 0.01)
INSERT dbo.Tabella1 VALUES('Campo2', 0.05)
INSERT dbo.Tabella1 VALUES('Campo3', 0.0
INSERT dbo.Tabella2 VALUES(0.01, NULL, NULL)
INSERT dbo.Tabella2 VALUES(NULL, 0.05, NULL)
INSERT dbo.Tabella2 VALUES(NULL, NULL, 0.0
GO
========================
(questo intendevo nel mio precedente post quando ti chiedevo di postare uno script per riprodurre lo scenario). A questo punto come prima cosa mettiamo a posto la "tabella" che contiene i dati che devono essere presi in considerazione per procedere all'aggiornamento. Per semplicità mi definisco una vista
========================
CREATE VIEW dbo.vw_Tabella2
AS
SELECT MAX(ISNULL(Campo1, 0)) Campo1,
MAX(ISNULL(Campo2, 0)) Campo2,
MAX(ISNULL(Campo3, 0)) Campo3
FROM dbo.Tabella2
========================
a questo punto quindi aggiorno Tabella1 sulla base del contenuto della vista. Quindi
========================
UPDATE A
SET Valore =
CASE
WHEN Campo = 'Campo1' THEN B.Campo1
WHEN Campo = 'Campo2' THEN B.Campo2
WHEN Campo = 'Campo3' THEN B.Campo3
END
========================
Quindi devo passare alla query di update un campo variabile...che ti ripeto che non puoi fare...
Spero di essere stato più chiaro.
Si, e come vedi l'alternativa all'uso del cursore (anche quando il cursore non avrebbe funzionato per il motivo di cui sopra) esiste. Ti consiglio di fare in modo che la struttura dati assuma una forma meno "estroversa" altrimenti i problemi di oggi te li ritroverai amplificati in breve tempo...
Ciao e grazie
Bye