Cualquiera de los cuatro valores en #S
coincidirá con el valor de fila única de su tabla de destino (todos los valores en #S tienen id =1 y nombre ='A', por lo que todos coinciden con la fila única en el objetivo), por lo tanto, este valor se actualizará cuatro veces - ese es el error dice, y tiene toda la razón.
¿Qué es lo que realmente quieres lograr aquí?
¿Desea establecer la dirección en el primero de los valores de la tabla de origen? Usa un TOP 1
cláusula en su subselección:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
¿Desea establecer la dirección en un elemento aleatorio de los valores de la tabla de origen? Usa un TOP 1
y ORDER BY NEWID()
cláusula en su subselección:
MERGE #T
USING (SELECT TOP 1 id, name, address FROM #S ORDER BY NEWID()) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
UPDATE SET Address = S.Address;
Si hace coincidir cuatro filas de origen con una sola fila de destino, nunca obtendrá un resultado útil:necesita saber lo que realmente quiere.
Marc