INSERT INTO TABLA SELECT * FROM OTRATABLA CON PRIMARY KEY

06/11/2008 - 22:00 por Alonso Vilela | Informe spam
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

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
06/11/2008 - 22:20 | Informe spam
Hola Alonso,

On 6 nov, 22:00, "Alonso Vilela" wrote:
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




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
Respuesta Responder a este mensaje
#2 Alonso Vilela
07/11/2008 - 00:13 | Informe spam
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



"Carlos M. Calvelo" wrote in message
news:
Hola Alonso,

On 6 nov, 22:00, "Alonso Vilela" wrote:
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




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
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
07/11/2008 - 01:41 | Informe spam
Hola Alonso,

On 7 nov, 00:13, "Alonso Vilela" wrote:
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



No.

Puedes definir que la columna que es la clave primaria sea
tambien identity(). Entonces al insertar un registro no tienes que
proporcionar ningún valor para esa columna y se autoincrementará
por si sola.

Busca en el esquema de esa tabla en la propiedades de esa
columna y verás el identiy.

Pero te pongo un ejemplo:

declare @A Table (
nr int not null primary key identity(1,1),
nombre varchar(20) not null
)

insert into @A (nombre)
select 'Alonso'
union select 'Carlos'
union select 'Pepito'

select * from @A

como vés no hemos proporcionado la columna 'nr'
pero ahí está.

Yo lo he hecho con una variable @A pero lo mismo
puedes hacer con una tabla 'normal'.

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 GuilleSQL
07/11/2008 - 08:50 | Informe spam
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


"Alonso Vilela" wrote:

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




Respuesta Responder a este mensaje
#5 Maxi Accotto
11/11/2008 - 07:06 | Informe spam
Carlos, los identity no soportan transacciones y quedaran huecos en la
numeracion


Saludos
Maxi Accotto
Microsoft MVP en SQLServer
SQltotalconsulting
-

"Carlos M. Calvelo" escribió en el mensaje de
noticias:
Hola Alonso,

On 7 nov, 00:13, "Alonso Vilela" wrote:
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



No.

Puedes definir que la columna que es la clave primaria sea
tambien identity(). Entonces al insertar un registro no tienes que
proporcionar ningún valor para esa columna y se autoincrementará
por si sola.

Busca en el esquema de esa tabla en la propiedades de esa
columna y verás el identiy.

Pero te pongo un ejemplo:

declare @A Table (
nr int not null primary key identity(1,1),
nombre varchar(20) not null
)

insert into @A (nombre)
select 'Alonso'
union select 'Carlos'
union select 'Pepito'

select * from @A

como vés no hemos proporcionado la columna 'nr'
pero ahí está.

Yo lo he hecho con una variable @A pero lo mismo
puedes hacer con una tabla 'normal'.

Saludos,
Carlos

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