193 messaggi dal 05 settembre 2001
Situazione di partenza:

Tabella1

a b
--------------
0 0


Se faccio un semplice UPDATE del tipo:

UPDATE Tabella1 SET a = 5, b = a + 1

in MySql ottengo un risultato del tipo:

a b
--------------
5 6

mentre con Sql Server ottengo:

a b
--------------
5 1

Come faccio a dire a Sql Server di ragionare sul valore di "a" dopo l'aggiornamento?

Ciao e grazie
823 messaggi dal 05 agosto 2002
Con due updates successive

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
s_dimaio wrote:
UPDATE Tabella1 SET a = 5, b = a + 1

in MySql ottengo un risultato del tipo:

a b
--------------
5 6
Ogni istruzione è implicitamente una transazione e le modifiche devono essere apportate con il principio del "tutte o nessuna". La colonna a assumerà il valore 5 solo al termine della transazione pertanto non è assolutamente corretto valorizzare un campo (che ancora non è stato aggiornato) con il valore di un campo che è già stato aggiornato. In base a quale principio decidi se deve essere aggiornato prima il campo a (quindi b riflettere il nuovo valore di a + 1) oppure deve essere prima aggiornato b utilizzando il vecchio valore di a? Temo che questo comportamento di MySQL non sia conforme allo standard ANSI...
mentre con Sql Server ottengo:...questo lo considero invece un comportamento lecito...
Come faccio a dire a Sql Server di ragionare sul valore di "a" dopo
l'aggiornamento?...puoi utilizzare una variante poco nota dell'istruzione UPDATE dove si
utilizza una variabile per memorizzare il valore che avrà un campo al termine dell'aggiornamento

====================
DECLARE @v SMALLINT

UPDATE dbo.MyTable
SET @v = a = 5,
b = @v +1

====================

Bada bene che rispetto al comportamento che hai indicato essere normale per MySQL, ci troviamo in una condizione decisamente diversa. In questo caso sfrutto una variabile (valorizzata nel corso dell'istruzione) per assegnare un valore al campo a ed un valore al campo b.
Ciao e grazie
Bye

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.