269 messaggi dal 03 marzo 2002
Devo rendere uguali 2 tabelle di 2 db diversi.
Allora farei un ciclo per ogni id del db di origine.
Se l'id non esiste lo devo creare.
Se esiste devo controllare che il campo titolo sia uguale.
In caso negativo devo aggiornare.

Per capirci, volevo fare una cosa del genere:

select (case when (select count(1) from dbdestinazione.articoli.id ) = '1' then ( case when  dbdestinazione.articoli.titolo <> dborigine.articoli.titolo then update dbdestinazione.articoli set dbdestinazione.articoli.titolo = dborigine.articoli.titolo ) else ( insert into dbdestinazione.articoli ( titolo )  values ( dborigine.articoli.titolo ) end ) from dborigine

1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
nelchael81 ha scritto:
Se l'id non esiste lo devo creare.
Se esiste devo controllare che il campo titolo sia uguale.
In caso negativo devo aggiornare.


In SQL Server non esiste ancora un operatore del genere; sarà presente in SQL Server 2008 (MERGE).
Per ora devi procedere ad una duplice (o triplice) istruzione; qualcosa di simile a

============================
--eliminazione dei record non più presenti
DELETE dbo.Destinazione
WHERE PK NOT IN (SELECT PK FROM dbo.Origine)

--aggiornamento dei record modificati
UPDATE
SET campo1 = O.campo1,
campo2 = O.campo2,
...,
campon = O.campon
FROM dbo.Origine O INNER JOIN dbo.Destinazione D
ON O.PK = D.PK
WHERE campo1 <> O.campo1
OR campo2 = O.campo2
OR ...
OR campon = O.campon

--inserimento dei nuovi
INSERT dbo.Destinazione
SELECT O.*
FROM dbo.Origine O LEFT JOIN dbo.Destinazione D
ON O.PK = D.PK
WHERE D.PK IS NULL
============================

Bye
269 messaggi dal 03 marzo 2002
Grazie 1000.
E' un peccato che non si posa ancora fare. Accelererebbe di molto il lavoro.

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.