>Allora io devo eseguire un'Update sulla tabella Appoggio_mov
>valorizzando il campo codcomune, prendendo questo codice dalla
>tabella comuni e tenendo presente
>che l'update deve essere eseguita solo sui record che hanno codnazione=0.
>
>Come posso fare?
Così:
USE tempdb;
CREATE TABLE dbo.Appoggio_mov(
id bigint IDENTITY(1,1) NOT NULL,
codalbergo int NULL,
codcomalbergo int NULL,
codnazione int NULL,
comune varchar(250) NULL,
codcomune int NULL
CONSTRAINT PK_Appoggio_mov PRIMARY KEY(id)
);
CREATE TABLE dbo.Comuni(
id int IDENTITY(1,1) NOT NULL,
codcomune int NULL,
comune varchar(250) NULL
CONSTRAINT PK_comuni PRIMARY KEY(id)
);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 0, 'Latina', 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 0, 'Terracina', 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 0, 'Palermo', 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 0, 'Cagliari', 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 5, NULL, 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 10, NULL, 0);
INSERT dbo.Appoggio_mov VALUES(48, 60035, 0, 'Frosinone', 0);
INSERT dbo.Comuni VALUES(58032, 'Roma');
INSERT dbo.Comuni VALUES(59032, 'Latina');
INSERT dbo.Comuni VALUES(54033, 'Palermo');
INSERT dbo.Comuni VALUES(66070, 'cagliari');
INSERT dbo.Comuni VALUES(60038, 'frosinone');
INSERT dbo.Comuni VALUES(57032, 'Terracina');
UPDATE A
SET A.codcomune = C.codcomune
FROM dbo.Appoggio_mov AS A
JOIN dbo.Comuni AS C
ON A.comune = C.comune
WHERE A.codnazione = 0;
SELECT *
FROM dbo.Appoggio_mov;
/* Output:
id codalbergo codcomalbergo codnazione comune codcomune
--- ----------- ------------- ----------- ----------- -----------
1 48 60035 0 Latina 59032
2 48 60035 0 Terracina 57032
3 48 60035 0 Palermo 54033
4 48 60035 0 Cagliari 66070
5 48 60035 5 NULL 0
6 48 60035 10 NULL 0
7 48 60035 0 Frosinone 60038
(7 row(s) affected)
*/
DROP TABLE dbo.Appoggio_mov, dbo.Comuni;
Ora ti chiedo cortesemente di fermarti a confrontare il codice che hai postato con il mio... che differenze noti?
Ad esempio, perché i tuoi comandi di INSERT inseriscono SEMPRE stringhe nelle colonne numeriche obbligando SQL Server ad eseguire dei cast impliciti?
Perché TUTTE le tue colonne ad esclusione della PK ammettono il (non)valore NULL?
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org