Comparar tabla con consulta e insertar nuevos registros

29/09/2005 - 10:15 por Jose_A | Informe spam
Lo que quiero es insertar los resultados de una select que NO tengo en una
tabla en otro servidor.
Eleazar me ha comentado que puedo rehacer la sentencia insert, pero la
verdad es que como novato no sé ni por dónde empezar. Inserto los resultados
en una tabla en otro servidor de ésta manera (borro la tabla, e inserto los
resultados de la select):

execute ServerP.bdpruebas.dbo.sp_executesql N'truncate table ttodos'
INSERT INTO OPENQUERY(ServerP, 'select * from ttodos where 1=2')
select nb.num_reg, nb.camp1, nb.camp2,nb.camp5,nb.camp3,nb.camp4,
case when nacamp6 IS null then nb.camp6
when nacamp6 = '' then nb.camp6
else nacamp6
END,
nb.camp7, mb.camp8,
case when c.camp9 IS null then nb.camp9
when c.camp9 = '' then nb.camp9
else c.camp9
END,
nb.camp10,nb.camp11,nb.camp12,
From tabla1 nb (NOLOCK) LEFT OUTER JOIN tabla2 na (NOLOCK) ON nb.camp6 =
na.codigo
LEFT OUTER JOIN tabla3 c (NOLOCK) ON nb.camp9 = c.codigo ,tabla4 mb (NOLOCK)
Where nb.fecha = '20080101' And (nb.camp11 = 'D' or nb.camp11 = 'T')
and nb.camp3 <> 0 and nb.camp11 = mb.codigo order by nb.fecha

¿Alguien sabe si puedo insertar sólo los que sean nuevos en la consulta sin
tener que borrar la tabla? ¿Debo rehacerlo todo?
Muchas gracias por vuestra atención...
 

Leer las respuestas

#1 Maxi
29/09/2005 - 18:19 | Informe spam
Hola, si quieres solo insertar los registros que no estan en la otra tabla
deberias usar algo como esto:

INSERT INTO TUTABLA (CAMPOS)
SELECT CAMPOS FROM TABLA_ORIGINAL LEFT JOIN
TUTABLA ON
TABLAORIGINAL.CAMPOID = TUTABLA.CAMPOID
WHERE TUTABLA.CAMPOID IS NULL


Salu2
Maxi


"Jose_A" escribió en el mensaje
news:
Lo que quiero es insertar los resultados de una select que NO tengo en una
tabla en otro servidor.
Eleazar me ha comentado que puedo rehacer la sentencia insert, pero la
verdad es que como novato no sé ni por dónde empezar. Inserto los
resultados
en una tabla en otro servidor de ésta manera (borro la tabla, e inserto
los
resultados de la select):

execute ServerP.bdpruebas.dbo.sp_executesql N'truncate table ttodos'
INSERT INTO OPENQUERY(ServerP, 'select * from ttodos where 1=2')
select nb.num_reg, nb.camp1, nb.camp2,nb.camp5,nb.camp3,nb.camp4,
case when nacamp6 IS null then nb.camp6
when nacamp6 = '' then nb.camp6
else nacamp6
END,
nb.camp7, mb.camp8,
case when c.camp9 IS null then nb.camp9
when c.camp9 = '' then nb.camp9
else c.camp9
END,
nb.camp10,nb.camp11,nb.camp12,
From tabla1 nb (NOLOCK) LEFT OUTER JOIN tabla2 na (NOLOCK) ON nb.camp6 > na.codigo
LEFT OUTER JOIN tabla3 c (NOLOCK) ON nb.camp9 = c.codigo ,tabla4 mb
(NOLOCK)
Where nb.fecha = '20080101' And (nb.camp11 = 'D' or nb.camp11 = 'T')
and nb.camp3 <> 0 and nb.camp11 = mb.codigo order by nb.fecha

¿Alguien sabe si puedo insertar sólo los que sean nuevos en la consulta
sin
tener que borrar la tabla? ¿Debo rehacerlo todo?
Muchas gracias por vuestra atención...

Preguntas similares