SQL Server - Utilizaciòn sentencia MERGE

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 86
Ha disminuido su posición en 2 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

Utilizaciòn sentencia MERGE

Publicado por Rafael (110 intervenciones) el 12/08/2015 12:41:29
Has probado poner algo como:

en el NO MATCHED
1
when not matched by destino then

Ya nos contaras...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Utilizaciòn sentencia MERGE

Publicado por Marcela C. (4 intervenciones) el 12/08/2015 15:26:09
Lo he probado, pero sigue devolviendo el mismo error ...

Gracias !!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Utilizaciòn sentencia MERGE

Publicado por Isaias (4558 intervenciones) el 12/08/2015 18:58:22
Por aca tienes algo del BOL, puedes consultar y ver que te hace falta

https://technet.microsoft.com/es-es/library/bb522522(v=sql.105).aspx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar