Tengo las siguientes dos tablas:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
Necesito insertar datos de Table1
a Table2
. Puedo usar la siguiente sintaxis:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Sin embargo, en mi caso, pueden existir ID duplicados Table2
(en mi caso, es solo " 1
") y no quiero copiar eso nuevamente, ya que eso arrojaría 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
¿Existe una mejor manera de hacer esto sin usar IF - ELSE
? Quiero evitar dos INSERT INTO-SELECT
afirmaciones basadas en alguna condición.
sql
sql-server
tsql
sql-insert
Ashish Gupta
fuente
fuente
NOT EXISTS
es especialmente útil con la clave primaria compuesta,NOT IN
no funcionará entoncesEn MySQL puedes hacer esto:
¿SQL Server tiene algo similar?
fuente
Acabo de tener un problema similar, la palabra clave DISTINCT funciona mágicamente:
fuente
insert into
tabla.Recientemente, estaba enfrentando el mismo problema ...
Esto es lo que funcionó para mí en el servidor MS SQL 2017 ...
La clave principal debe establecerse en la ID en la tabla 2 ...
Las columnas y las propiedades de las columnas deben ser las mismas, por supuesto, entre ambas mesas. Esto funcionará la primera vez que ejecute el siguiente script. El ID duplicado en la tabla 1, no se insertará ...
Si lo ejecuta por segunda vez, obtendrá un
Este es el código:
fuente
Usar
ignore Duplicates
en el índice único como lo sugirió IanC aquí fue mi solución para un problema similar, creando el índice con la OpciónWITH IGNORE_DUP_KEY
Ref .: index_option
fuente
Desde SQL Server, puede establecer un índice de clave única en la tabla para (columnas que deben ser únicas)
fuente
Un poco fuera de tema, pero si desea migrar los datos a una nueva tabla, y los posibles duplicados están en la tabla original , y la columna posiblemente duplicada no es una identificación,
GROUP BY
lo hará:fuente
Un simple
DELETE
antes delINSERT
sería suficiente:Conmutación
Table1
deTable2
función de la tabla deId
yname
emparejamiento desea conservar.fuente