INSERT INTO (como evitar duplicados)

20/07/2007 - 07:32 por Jordi | Informe spam
Hola,

Tengo 2 tablas identicas y hago un insert into de tabla2 a tabla1
perfecto, el codigo seria este:

INSERT INTO tabla1 (PK_campo1,campo2,campo3)
(SELECT PK_campo1,campo2,campo3 from tabla2)

Pero solo quiero insertar los que no existan en tabla1, pq sino da error
en la PrimaryKey...

como hago el select/insert?

gracias,

Preguntas similare

Leer las respuestas

#16 Rafael
20/07/2007 - 18:32 | Informe spam
"Eclat" wrote in message
news:
Rafael, ¿alguna sugerencia al respecto? Es decir, yo intento leer el grupo
casi todos los días, y la verdad es que te vas haciendo con un montón de
truquillos que me los voy guardando.

La verdad es que me estoy como quien dice empezando a enfrentar a SQL
Server (hasta ahora había usado Paradox, Access, Firebird, etc), pero veo
que SQL Server tiene su intringulis para muchas cosas.

Lo dicho, Internet y San Google sabemos todos que está lleno de
información al respecto, quizá demasiada, así que si tienes algunos sitios
que pienses que son aconsejables de visitar/estudiar te agradecería que
nos los comentaras (especialmente a mí :D ).




Sitios especificos no puedo decirte en este momento pero si me das mas
tiempo te los busco en google.

Yo mencione documentacion no necesariamente de internet.

En lo que a mi respecta, ademas de con la ayuda yo aprendi mucho con libros
como:
[SQL Server 2000 Programación con ejemplos] pero como ese hay muchos otros
cuyas referencias estan tambien en google.


Rafael
Respuesta Responder a este mensaje
#17 Juanma
24/07/2007 - 08:19 | Informe spam
O.O

Tienes razon, son el mas malo de los malos, prometo contestar mejor a la
gente que contesta mal... ostia... o no tendria de ser asi... bueno... tema
zanjado.

"Juan Diego Bueno" escribió en el mensaje
news:uX%


"Juanma" escribió en el mensaje
news:%



pero hay buenas maneras de decirlo y no tan buenas. Ahí
esta la falta de respeto, en como lo digas.



Pues eso, aquí tenemos dos maneras, cada cual que decida cual de las dos
formas es la buena y cual la no tan buena:

(1) Pero que enfermo que eres Rafael... JAJAJA...no te lo tomes a mal,
pero el
grupo de noticias sirve para preguntar, aunque hay quien lo utiliza para
demostrarse a si mismo lo bueno que es y lo mucho que se quiere.
No es culpa tuya, lo entiendo, tu solo quieres ayudar, eres como spiderman
o
superman, pero a lo Sql Programmer.
Siento meterme donde no me llaman, pero encuentro indignante tu respuesta,
podias haber contestado la pregunta y quedar como un señor, como un
profesional, pero claro, era demasiado facil...

(2) Jordi, no lo tomes a mal pero viendo esta y las otras preguntas que
has
hecho, pienso que deberias leer algo en la ayuda o alguna documentacion
basica de T-SQL antes de preguntar en el foro ya que veo que tus preguntas
son muy basicas. (...) Le pido excusas porque no fue intencion se
ofendieran.


Por mi parte, tema zanjado

Saludos



Respuesta Responder a este mensaje
#18 Miguel Egea
26/07/2007 - 14:34 | Informe spam
Bueno, como en este hilo se habla de portalsql les voy a contar un par de
cosas si me lo permiten (ya sé que es estúpido pedir permiso, al fin y al
cabo estoy aquí solo frente a mi pc :p)

Todas las cuestiones, por simples que parezcan pueden tener matices, algunas
veces enriqueceros que hacer, al menos todas las técnicas que al fin y al
cabo son las que tratamos aquí. A modo de ejemplo he intentado como no
responder con lo obvio en este hilo, a fé mia que no para parecer pedante ni
dar ninguna sensación a quien tenga a bien leerme, (aunque tal y como he
escrito el párrafo un poco pedante si que queda :p))

El tema es que yo personalmente incluso de las pregunta más sencillas a
veces aprendo cosas, y este es un ejemplo, al ver la pregunta me acordé de
la cláusula IGNORE_DUP_KEY , lo cierto es que vale para los índices, pero
por más que he mirado la sintaxis de Alter Table, y constraint no he visto
que la mencione en absoluto, así que simplemente, he hecho lo que hacemos
todos los días, seguir mi intuición y probar, y he probado este script. Cual
ha sido mi sorpresa cuando ha funcionado e igual pude ayudar a alguien en
alguna circunstancia.

El tema es que la cláusula ignore_dup_key funciona también para pks, no
permitiendo duplicados sino obviando la inserción sin dar un error, ¿Acaso
es esto deseable? uff, seguramente no, uno ha de enterarse de los errores y
actuar en consecuencia


create table a (id int not null, c char(100) default '')
go
alter table a add constraint pk_a_id primary key clustered (id) with
(IGNORE_DUP_KEY = on)
go
insert into a (id)
select 1
union all
select 1
union all
select 1

y como podría saber que solo se insertó uno y no trés, pues comprobando
@@rowcount, así podríamos decir se intentaron insertar X filas (calcule X
antes de insertarlo) de ellas se insertaron realmente XX

Hay más casos, por ejemplo si el dato duplicado no está en la tabla de
destino sino en la de origen un left join como propone maxi no funcionaría,
tampoco funcionaría el not exist, no al menos directamente sin añadir o bien
un
select distinct campos.. from tabla
o un select campos from tabla
union
select campos from tabla.


¿y a que viene todo este rollo?

Pues si os soy sincero, viene porque aunque lamentablemente no tengo el
tiempo que me gustaría para dedicarle a portalsql (malditos spamers) y
tampoco para leer este grupo, lo cierto es que un montón de lo que soy se lo
debo al espíritu de este grupo desde hace algunos años, me encanta ver
cuando todos a una quedamos a tomar cervezas virtuales (y con más de uno
hemos tomado algunas físicas), me encanta ver cuando alguien que tenía un
problema contesta que igual por esta respuesta a una pregunta "simple" ya no
le despedirán (y por aquí se han visto casos de estos.

Yo ahora me defiendo bastante bien con SQL, pero la primera vez que ví un
SQL Server 6.0 tuve que llamar a un compañero para que me dijese donde
puñeta estaba el botón para ejecutar consultas después de haberlas escrito,
lo que me dijo este amigo fué, "maximiza esa ventana, idiota", y me dije a
mi mismo como en la peli "juro que nunca más pasaré hambre" y me puse a
estudiar y leer este grupo como un poseso

¿que pretendo que nos haga pensar este mensaje?

Cuando no tengamos algo bonito que decir, simplemente, guardemos silencio.

No preguntemos ¿que service pack tienes? si no es relevante, No digamos "tu
pregunta es tonta", No nos enzarcemos en discusiones que no sean técnicas,
esas nos enriquecen (os pongo un ejemplo)
http://www.portalsql.com/naturaleso...p?articulo!9
Hagamos lo siguiente
Quedemos a tomar una cervecita (virtual)
Si hay algun post que crean que debe quedar más inmortalizado, publiquemoslo
en portalsql.com (estoy trabajando para que todos los que quieran puedan
publicar directamente)


de antemano pido perdón, si alguien vé en mi mail segundas intenciones solo
obedece a mi manifiesta inutilidad para expresarme bien, me encantaría que
dentro de X tiempo, encontrarme con alguno de ustedes por esos mundos de
dios, y que me diga yo soy Tal del grupo de usuarios, y que en mi estómago
sienta lo mismo que cuando he puesto cara a alguno de ustedes, una profunda
emoción y amistad.

A su disposición

Miguel Egea
SQL Server MVP








"Jordi" wrote in message
news:
Hola,

Tengo 2 tablas identicas y hago un insert into de tabla2 a tabla1
perfecto, el codigo seria este:

INSERT INTO tabla1 (PK_campo1,campo2,campo3)
(SELECT PK_campo1,campo2,campo3 from tabla2)

Pero solo quiero insertar los que no existan en tabla1, pq sino da
error en la PrimaryKey...

como hago el select/insert?

gracias,




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida