Aggiornamento condizionato SQL server

martedì 02 marzo 2010 - 16.46

denis.basei Profilo | Senior Member

Salve ragazzi

mi trovo di fronte a questo problema: dovrei aggiornare il valore di un campo di una tabella con il valore di un corrispondente campo di un'altra tabella solo nel caso in cui tra le due esista una certa relazione. Per essere chiaro posto la query

CREATE PROCEDURE CorreggiIndicativoNazione
@CodiceAzienda char(4),
@ListaCarico char(4)
AS
UPDATE LabelTest
SET LabelTest.IndicativoNazione =
(SELECT IndicativiNazione.IndicativoNazione FROM IndicativiNazione
WHERE (IndicativiNazione.CodiceCliente = LabelTest.CodiceCliente) AND (IndicativiNazione.CodiceAzienda = LabelTest.CodiceAzienda))
WHERE LabelTest.CodiceAzienda=@CodiceAzienda AND LabelTest.ListaCarico=@ListaCarico

Nello specifico la query qui sopra aggiorna LabelTest.IndicativoNazione con Null in tutti i records dove non trova corrispondenza. Al contrario io vorrei che dove non trova corrispondenza lasciasse il valore esistente.

E' possibile?



Grazie 1000
Denis B. - www.baseiengineering.com

lbenaglia Profilo | Guru

>Nello specifico la query qui sopra aggiorna LabelTest.IndicativoNazione
>con Null in tutti i records dove non trova corrispondenza. Al
>contrario io vorrei che dove non trova corrispondenza lasciasse
>il valore esistente.
>
>E' possibile?

Ciao Denis,

Per rispondere adeguatamente ad un quesito occorre riprodurre il problema, pertanto è necessario mettere nelle condizioni di operare chi decide di accettare la sfida
Pertanto dovresti sempre postare un esempio completo con la struttura delle tabelle (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il restult set finale che intendi ottenere con quei dati.

Ad ogni modo, provo a proporti una soluzione che dovrebbe risolvere il tuo problema:

CREATE PROCEDURE CorreggiIndicativoNazione @CodiceAzienda char(4), @ListaCarico char(4) AS UPDATE LT SET LT.IndicativoNazione = I.IndicativoNazione FROM dbo.LabelTest AS LT JOIN dbo.IndicativiNazione AS I ON LT.CodiceCliente = I.CodiceCliente AND LT.CodiceAzienda = I.CodiceAzienda WHERE LT.CodiceAzienda = @CodiceAzienda AND LT.ListaCarico = @ListaCarico;

La tua query invece aggiornava tutte le righe della tabella LabelTest e dove non trovava alcuna corrispondenza nella tabella IndicativiNazione SQL Server si trovava costretto ad assegnare un "non valore" alla colonna IndicativoNazione (NULL appunto).

>Grazie 1000
Prego.

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

denis.basei Profilo | Senior Member

... anche senza esempio hai capito bene il mio problema.



Buona giornata.
Denis B. - www.baseiengineering.com
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