Una de bases de datos

27/08/2004 - 11:19 por Diego F. | Informe spam
Hola, tengo este pequeño dilema.

Tengo una tabla SQL en la que quiero que la clave primaria se autoincremente
automáticamente, con lo que cuando por programa añado filas a esa tabla, no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa clave es una clave
externa, por lo que para añadir las filas a esa tabla, necesito conocer ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a la primera tabla para
conocer el valor, pero ya que es precisamente la clave, el resto de valores
pueden no ser únicos.

¿Cómo se resuelve ésto?

Saludos,

Diego F.

Preguntas similare

Leer las respuestas

#1 Diego F.
27/08/2004 - 11:52 | Informe spam
Me respondo en parte a mi mismo. He encontrado que en Sql Server 2000 hay un
método: scope_identity() que me devuleve el valor de la última identidad que
se ha creado en mi sesión.

Mi pregunta es: ¿cómo recupero ese valor en una aplicación c#?

Veo que la gente hace: "select @valor = scope_identity", pero no se
recuperar ese @valor.

Saludos,

Diego F.
"Diego F." escribió en el mensaje
news:
Hola, tengo este pequeño dilema.

Tengo una tabla SQL en la que quiero que la clave primaria se


autoincremente
automáticamente, con lo que cuando por programa añado filas a esa tabla,


no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa clave es una clave
externa, por lo que para añadir las filas a esa tabla, necesito conocer


ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a la primera tabla


para
conocer el valor, pero ya que es precisamente la clave, el resto de


valores
pueden no ser únicos.

¿Cómo se resuelve ésto?

Saludos,

Diego F.



Respuesta Responder a este mensaje
#2 Alfredo Novoa
27/08/2004 - 12:05 | Informe spam
On Fri, 27 Aug 2004 11:19:20 +0200, "Diego F."
wrote:

Tengo una tabla SQL en la que quiero que la clave primaria se autoincremente
automáticamente, con lo que cuando por programa añado filas a esa tabla, no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa clave es una clave
externa, por lo que para añadir las filas a esa tabla, necesito conocer ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a la primera tabla para
conocer el valor, pero ya que es precisamente la clave, el resto de valores
pueden no ser únicos.

¿Cómo se resuelve ésto?



Hay dos formas:

1) Deja de usar campos autoincrementables.

2) select max(codigo) from tabla. El nivel de aislamiento debe ser:
"serializable"

Por cierto, creo que esta pregunta sería más apropiada para el grupo
microsoft.public.es.desarrollo


Saludos
Respuesta Responder a este mensaje
#3 Octavio Hernandez
27/08/2004 - 13:23 | Informe spam
Diego,

Usa la función @@IDENTITY:

http://www.marteens.com/trick38.htm

Slds - Octavio

"Diego F." escribió en el mensaje
news:
Hola, tengo este pequeño dilema.

Tengo una tabla SQL en la que quiero que la clave primaria se


autoincremente
automáticamente, con lo que cuando por programa añado filas a esa tabla,


no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa clave es una clave
externa, por lo que para añadir las filas a esa tabla, necesito conocer


ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a la primera tabla


para
conocer el valor, pero ya que es precisamente la clave, el resto de


valores
pueden no ser únicos.

¿Cómo se resuelve ésto?

Saludos,

Diego F.



Respuesta Responder a este mensaje
#4 Alejandro Perez
27/08/2004 - 15:13 | Informe spam
Hola Diego. Como estas?

Exactamente, el scope_identity es una funcion de SQL
Server 2000 que te devuelve el valor del ultimo identity
generado. Si estas trabajando con Stored Procedures, lo
que puedes hacer es crear un parametro OUTPUT, en el cual
retornes ese @valor

Seria algo asi:

CREATE PROCEDURE AgregarRegistro
@valor int OUT
AS
//AQUI AGREGAS EL REGISTRO
SELECT @valor = scope_identity()
GO

Y en C# obtienes ese parametro de salida... algo como:

myParm = miDataAdapter.InsertCommand.Parameters.Add
("@valor", SqlDbType.Int, 0);

//Luego que agreges el registro, lees el valor de este
parametro..

Dime si te ayuda de algo la idea, si no le buscamos otra
solucion.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela





Me respondo en parte a mi mismo. He encontrado que en Sql


Server 2000 hay un
método: scope_identity() que me devuleve el valor de la


última identidad que
se ha creado en mi sesión.

Mi pregunta es: ¿cómo recupero ese valor en una


aplicación c#?

Veo que la gente hace: "select @valor = scope_identity",


pero no se
recuperar ese @valor.

Saludos,

Diego F.
"Diego F." escribió en el mensaje
news:
Hola, tengo este pequeño dilema.

Tengo una tabla SQL en la que quiero que la clave




primaria se
autoincremente
automáticamente, con lo que cuando por programa añado




filas a esa tabla,
no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa




clave es una clave
externa, por lo que para añadir las filas a esa tabla,




necesito conocer
ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a




la primera tabla
para
conocer el valor, pero ya que es precisamente la clave,




el resto de
valores
pueden no ser únicos.

¿Cómo se resuelve ésto?

Saludos,

Diego F.







.

Respuesta Responder a este mensaje
#5 Diego F.
27/08/2004 - 20:26 | Informe spam
Muchas gracias, está resuelto con ese método :-)


Saludos,

Diego F.


"Alejandro Perez" escribió en el mensaje
news:158a01c48c37$aed2d880$
Hola Diego. Como estas?

Exactamente, el scope_identity es una funcion de SQL
Server 2000 que te devuelve el valor del ultimo identity
generado. Si estas trabajando con Stored Procedures, lo
que puedes hacer es crear un parametro OUTPUT, en el cual
retornes ese @valor

Seria algo asi:

CREATE PROCEDURE AgregarRegistro
@valor int OUT
AS
//AQUI AGREGAS EL REGISTRO
SELECT @valor = scope_identity()
GO

Y en C# obtienes ese parametro de salida... algo como:

myParm = miDataAdapter.InsertCommand.Parameters.Add
("@valor", SqlDbType.Int, 0);

//Luego que agreges el registro, lees el valor de este
parametro..

Dime si te ayuda de algo la idea, si no le buscamos otra
solucion.

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela





Me respondo en parte a mi mismo. He encontrado que en Sql


Server 2000 hay un
método: scope_identity() que me devuleve el valor de la


última identidad que
se ha creado en mi sesión.

Mi pregunta es: ¿cómo recupero ese valor en una


aplicación c#?

Veo que la gente hace: "select @valor = scope_identity",


pero no se
recuperar ese @valor.

Saludos,

Diego F.
"Diego F." escribió en el mensaje
news:
Hola, tengo este pequeño dilema.

Tengo una tabla SQL en la que quiero que la clave




primaria se
autoincremente
automáticamente, con lo que cuando por programa añado




filas a esa tabla,
no
me preocupo de dar valor a esa clave.

El problema viene porque en una segunda tabla, esa




clave es una clave
externa, por lo que para añadir las filas a esa tabla,




necesito conocer
ese
valor.

Sólo se me ocurre que tendría que hacer una consulta a




la primera tabla
para
conocer el valor, pero ya que es precisamente la clave,




el resto de
valores
pueden no ser únicos.

¿Cómo se resuelve ésto?

Saludos,

Diego F.







.

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