Utilizaciòn sentencia MERGE
Publicado por Marcela C. (4 intervenciones) el 11/08/2015 22:11:29
Tengo definido el siguiente còdigo, en la base de datos de origen existen registros duplicados, pero al ejecutar el MERGE parece no reconocer "when matched" por que me devuelve el error "Infracción de la restricción PRIMARY KEY 'PK_tabla1'. No se puede insertar una clave duplicada en el objeto 'dbo.tabla1'.... Reviso el còdigo y no encuentro el error .....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
merge into tabla1 as destino
using (select distinct cast(left(rtrim(ltrim(campo1)),len(rtrim(ltrim(campo1))) - 2) as int),
right(rtrim(ltrim(campo1)),1),
plan1.campo3,
plan1.campo4,
plan1.campo5,
plan1.campo6,
plan1.campo7,
plan1.campo8,
plan1.campo9,
plan1.campo10
from base1..tabla2 plan1
inner join
base1..tabla3 cia
on plan1.CODIGO = cia.CODIGO
where (campo1 is not NULL )) as origen (CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5, CAMPO6, CAMPO7, CAMPO8, CAMPO9, CAM PO10)
on (destino.campo1 = origen.CAMPO1 and
destino.campo3 = origen.CAMPO3 and
destino.campo4 = origen.CAMPO4 and
destino.campo5 = origen.CAMPO5)
when matched then
update set destino.campo7 = origen.CAMPO7
when not matched then
insert (campo1, campo2, campo3, campo4, campo5, campo6, campo7, campo8, campo9, campo10)
values (origen.CAMPO1, origen.CAMPO2, origen.CAMPO3, origen.CAMPO4, origen.CAMPO5, origen.CAMPO6, origen.CAMPO7, origen.CAMPO8, origen.CAMPO9, origen.CAMPO10)
OUTPUT $action, deleted.*, inserted.*;
Valora esta pregunta


0