Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Update su campo NULL ??

258 views
Skip to first unread message

Goldrake

unread,
Oct 5, 2005, 8:41:49 AM10/5/05
to
Ho un problema sicuramente stupido (per voi) ma per me non comprensibile.

Lanciando una semplice query di update tipo :
UPDATE tabella SET campo = 'Pippo'
ho notato che se il campo in questione ha valore NULL l'update non viene
eseguito.

Potete darmi una soluzione per ovviare all'inconveniente ?

Grazie


Marcello

unread,
Oct 5, 2005, 8:48:00 AM10/5/05
to
Ciao,

> Potete darmi una soluzione per ovviare all'inconveniente ?

più che altro il problema non esiste:

use tempdb
go
create table test(a varchar(10))
go
insert into test values(null)
select * from test
update test set a='pippo'
select * from test
go
drop table test

Non è che fai una cosa tipo:

where campo=null ??

Quella where risulta sempre falsa, nel caso usa:

where campo is null

marc.

Goldrake ha scritto:

Lorenzo Benaglia

unread,
Oct 5, 2005, 8:56:44 AM10/5/05
to
Goldrake wrote:
> Lanciando una semplice query di update tipo :
> UPDATE tabella SET campo = 'Pippo'
> ho notato che se il campo in questione ha valore NULL l'update non
> viene eseguito.
>
> Potete darmi una soluzione per ovviare all'inconveniente ?

Ciao Goldrake,

intendi dire che avendo una tabella contiene n righe con la colonna "campo"
valorizzata a NULL, quando tenti di aggiornare per tutte le righe tale
colonna con una nuovo valore diverso da NULL ottieni un errore?

In base a quanto affermi la cosa non può essere vera.
Guarda il seguente esempio:

USE tempdb
GO

/* Definisco la tabella dbo.Foo */
CREATE TABLE dbo.Foo(
Column1 varchar(10) NULL
)
GO

/* La popolo */
SET NOCOUNT ON
INSERT dbo.Foo VALUES(NULL)
INSERT dbo.Foo VALUES('Valore 1')
INSERT dbo.Foo VALUES(NULL)
INSERT dbo.Foo VALUES(NULL)
INSERT dbo.Foo VALUES('Valore 2')
INSERT dbo.Foo VALUES('Valore 3')
INSERT dbo.Foo VALUES(NULL)
SET NOCOUNT OFF
GO

/* Aggiorno tutte le righe valorizzando
** la colonna Column1 a 'Lorenzo'
*/
UPDATE dbo.Foo
SET Column1 = 'Lorenzo'
GO

/* Output:

(7 row(s) affected)

*/

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

/* Output:

Column1
----------
Lorenzo
Lorenzo
Lorenzo
Lorenzo
Lorenzo
Lorenzo
Lorenzo

(7 row(s) affected)

*/

/* Pulizia */
DROP TABLE dbo.Foo

Prova a postare la struttura completa di constraint della tabella (CREATE
TABLE), alcune righe di prova (INSERT INTO) ed il tuo comando di UPDATE.

> Grazie
Prego.

Ciao!

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


Goldrake

unread,
Oct 5, 2005, 9:05:49 AM10/5/05
to
Grazie Marcello per la tua risposta.

Ho provato ad eseguire lo script di esempio che mi hai indicato ed
effettivamente funziona.

Ho approfondito meglio il problema.
La query di update, in realtà, deve fare una concatenazione di stringa con
il valore contenuto nel campo stesso:

UPDATE tabella SET campo = 'Pippo' + campo

In questo caso non viene fatto l'aggiornamento, il campo rimane NULL.

Diversamente, se passo la stringa "secca" (vedi esempio nel mio post
iniziale) funziona.

Nel frattempo, mi sono documentanto , e credo che la soluzione al mio
problema sia aggiungere un bel ISNUL(campo,'') nella concatenazione , giusto
?

Scusa per l'imprecisione di prima

Grazie

"Marcello" <marcello...@epomops.it> ha scritto nel messaggio
news:uoD0qsay...@tk2msftngp13.phx.gbl...

Marcello

unread,
Oct 5, 2005, 9:09:51 AM10/5/05
to Goldrake
Ciao,

> Nel frattempo, mi sono documentanto , e credo che la soluzione al mio
> problema sia aggiungere un bel ISNUL(campo,'') nella concatenazione ,
giusto
> ?

giusto.

marc.

Goldrake ha scritto:

Goldrake

unread,
Oct 5, 2005, 9:22:12 AM10/5/05
to
Ciao Lorenzo.

Grazie per la risposta ma mi sono accorto che avevo spiegato male il
contesto del problema.

Scusate l'inconveniente.

"Lorenzo Benaglia" <lben...@despammed.com> ha scritto nel messaggio
news:3qi0sdF...@individual.net...

0 new messages