SQL Server - INSERT INTO TABLA SELECT * FROM OTRATABLA CON PRIMARY KEY

Asked By Alonso Vilela on 06-Nov-08 04:00 PM
Amigos tengo una tabla A y otra B
necesito hacer un inser into A select * from B, pero en a existe un primary
key id, como debo hacer para que la el insert sea transparente

Gracias




Carlos M. Calvelo replied on 07-Nov-08 07:11 AM
Hola Alonso,

ry

Esa columna (la clave primaria) tambi=E9n debes proporcionarla.
Qu=E9 quieres decir con 'insert tansparente'?

A ver si esto te vale:

insert into A (colPK, col1, col2)
select valorPK, colA, colB
from <...>

O quieres decir que la clave primaria es identity() ?

(en realidad no te estoy entendiendo)

Saludos,
Carlos
Alonso Vilela replied on 06-Nov-08 06:13 PM
Asi es disculpa la gramatica
La clave principal es identica y unica y seria mejor si fuera
autoincremental...

Para eso debo entonces primero hacer un sp que me de el ultimo id sumar 1 y
ese valor usar



Hola Alonso,


Esa columna (la clave primaria) también debes proporcionarla.
Qué quieres decir con 'insert tansparente'?

A ver si esto te vale:

insert into A (colPK, col1, col2)
select valorPK, colA, colB
from <...>

O quieres decir que la clave primaria es identity() ?

(en realidad no te estoy entendiendo)

Saludos,
Carlos
GuilleSQ replied on 07-Nov-08 02:50 AM
Hola Alonso,

Otra alternativa se utilizar la función ROW_NUMBER() de SQL Server 2005, la
cual, te devolverá un número secuencial. Te pongo un ejemplo:

DECLARE @MiClaveMayorDeA
SELECT @MiClaveMayorDeA=MAX(ID) FROM A

INSERT INTO B
SELECT @MiClaveMayorDeA+row_number() over(order by UnCampoCualquiera) AS ID,
B.*
FROM B

En SQL Server 2000 no existe la función ROW_NUMBER(). Una alternativa es
crear una tabla temporal con un autonumérico e insertar sobre ella.
Seguidamente, insertamos en la tabla final desde la tabla temporal,
añadiéndole al valor del autonumérico el SELECT MAX(ID), como en el ejemplo
anterior.

La ventaja de estas alternativas, está en que un campo Identity NO se puede
actualizar. Además, si deseas insertar sobre un campo Identity deberás
utilizar la opción SET IDENTITY_INSERT [tabla] ON, y después los mismo pero
con OFF. En caso de tener que realizar operaciones UPDATE e INSERT sobre
campos autonuméricos en SQL Server, puede resultar de interés evitarlos y
utilizar alternativas.

Saludos,

--
GuilleSQL
http://www.guillesql.es
Maxi Accotto replied on 11-Nov-08 01:06 AM
Carlos, los identity no soportan transacciones y quedaran huecos en la
numeracion

--

Saludos
-----------------------------------------------------------------------
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-------------------------------------------------------------------

noticias:8e00054a-1897-473a-9cdf-73c477bf116e@x16g2000prn.googlegroups.com...