Tengo las siguientes dos tablas:evitar duplicados en la consulta INSERT INTO SELECT en SQL Server
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
que necesito para insertar datos de Table1
a Table2
. Puedo utilizar la siguiente sintaxis:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Sin embargo, en mi caso, podrían existir identificadores duplicados en Table2
(en mi caso, es sólo "1
") y no quiero copiar de nuevo, ya que ello lanzar un error
puedo escribir algo como esto:
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
¿Hay una mejor manera de hacer esto sin usar IF - ELSE
? Quiero evitar dos declaraciones INSERT INTO-SELECT
basadas en alguna condición.
Ju Para una aclaración sobre la versión NO EXISTE, necesitará una sugerencia CON (HOLDLOCK) o no se tomarán bloqueos (¡porque no hay filas para bloquear!) entonces otro hilo podría insertar la fila debajo de ti. – IDisposable
Interesante, porque siempre creí que unirse era más rápido que las sub-selecciones. Tal vez sea solo para uniones rectas, y no aplicable a uniones izquierdas. – Duncan
Duncan, unirse es a menudo más rápido que las subsecuentes cuando son subconsultas correlacionadas. Si tiene la subconsulta en la lista de selección, una unión a menudo será más rápida. – HLGEM