Perché non fa questo lavoro specifico sintassi per upserting?
-
29-09-2019 - |
Domanda
sto usando SQL Server 2005 e voglio sincronizzare due tabelle che hanno la stessa definizione, ma esistono in diversi database. Unire in esiste solo nel 2008 e preferirei una sintassi in cui non devo specificare colonne nell'aggiornamento. Così mi sono imbattuto su vari post utilizzando la seguente sintassi:
UPDATE Destination FROM (Source INTERSECT Destination)
INSERT INTO Destination FROM (Source EXCEPT Destination)
Ma quando provo ad eseguirlo ottengo:
Incorrect syntax near the keyword 'FROM'.
Come posso ottenere questo lavoro? Ho più tabelle che ho necessità di sincronizzare e io non voglio specificare tutte le colonne in ogni affermazione.
Grazie per qualsiasi suggerimento!
Soluzione
Secondo la documentazione in linea del comando update
richiede la parola chiave set
, e deve venire prima la parola from
opzionale. Il insert
comando non ha uno stand alone parola chiave from
, l'from
esiste solo come parte di un'istruzione select
sia come fonte tabella derivata o all'interno di un'espressione di tabella comune.
Il link che hai di riferimento non sta mostrando valida la sintassi SQL Server 2005.
"Come posso ottenere questo lavoro? Ho più tabelle che ho necessità di sincronizzare e io non voglio specificare tutte le colonne in ogni affermazione."
Per update
, è necessario specificare tutte le colonne. Per insert
se l'origine e la destinazione hanno lo stesso struture quindi è possibile utilizzare insert into TARGTET_TABLE_NAME select * from SOURCE_TABLE_NAME
MA che non è raccomandato per il codice di produzione, se il cambiamento di origine o di destinazione, la dichiarazione si romperebbe. Se sorgente e destinazione sono diversi, è necessario specificare le colonne su almeno un lato dell'inserto.
Altri suggerimenti
Mi dispiace se questo non risponde alla tua domanda, ma assumendo tutta la ragione di questo è nell'interesse di risparmio di tempo, non puoi semplicemente fare clic destro sulla tabella di origine e generare lo script INSERT, poi a destra -clic la tabella di destinazione e generare uno script SELEZIONA vuoto, quindi combinare le due cose? Questo sarà solo lavoro se un kill-e-fill è accettabile nel proprio ambiente.