Ho le seguenti due tabelle:evitare duplicati in query di INSERT INTO SELECT SQL Server
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
ho bisogno di inserire i dati da Table1
a Table2
. Posso utilizzare la seguente sintassi:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Tuttavia, nel mio caso, potrebbero esistere ID duplicati in Table2
(nel mio caso, è solo "1
") e non voglio copiare che ancora una volta come questo sarebbe lanciare un errore
posso scrivere qualcosa del genere:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Esiste un modo migliore per fare questo senza usare IF - ELSE
? Voglio evitare due affermazioni INSERT INTO-SELECT
basate su alcune condizioni.
Ju Per un chiarimento sulla versione NOT EXISTS, avrai bisogno di un suggerimento WITH (HOLDLOCK) o non verranno presi blocchi (perché non ci sono righe da bloccare!) così un altro thread potrebbe inserire la riga sotto di te. – IDisposable
Interessante, perché ho sempre creduto che unirsi per essere più veloce dei sottoseleziona. Forse è solo per i join diretti, e non è applicabile ai join di sinistra. – Duncan
Duncan, l'unione è spesso più veloce che si sottosele quando sono sottoquery correlate. Se si ha la sottoquery nella lista di selezione, un join sarà spesso più veloce. – HLGEM