Udate di un campo in funzione di un altro

lunedì 25 aprile 2005 - 15.32

s_dimaio Profilo | Junior Member

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

lbenaglia Profilo | Guru

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

Ciao s_dimaio,

il comportamento che riscontri in SQL Server è coerente, in quanto entrambe le colonne a e b vengono aggiornate nella medesima transazione, pertanto quando valorizzi "b", "a" sarà ancora a 0.
Per ovviare al problema, potresti utilizzare una varibile di appoggio ed una sintassi del comando UPDATE piuttosto sconosciuta:

USE tempdb
GO

/* Definisco la tabella dbo.myTable */
CREATE TABLE dbo.myTable(
a tinyint NOT NULL,
b tinyint NOT NULL
)
GO

/* Inserisco la prima riga */
INSERT dbo.myTable VALUES(0, 0)
GO

DECLARE @Value tinyint

UPDATE dbo.myTable
SET @Value = a = 5
, b = @Value + 1
GO

/* Vediamo */
SELECT *
FROM dbo.myTable
GO

/* Output:

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

(1 row(s) affected)

*/

/* Pulizia */
DROP TABLE dbo.myTable

Per approfondire la sintassi del comando UPDATE, leggi il seguente paragrafo sui Books Online:
http://msdn.microsoft.com/library/en-us/tsqlref/ts_ua-uz_82n9.asp

> Ciao e grazie
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5