Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Error en un campo con llave primaria

Estas en el tema de Error en un campo con llave primaria en el foro de SQL Server en Foros del Web. Hola a todos: Tengo una base de datos con una tabla que tiene definidos varios campos. Uno de ellos tbl_campo_pk es la llave primaria. Y ...
  #1 (permalink)  
Antiguo 18/12/2009, 11:35
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Error en un campo con llave primaria

Hola a todos:

Tengo una base de datos con una tabla que tiene definidos varios campos. Uno de ellos tbl_campo_pk es la llave primaria. Y además esta definido como identity.

Quisiera saber con esta definición en SQL Server se puede presentar el caso de que se creen 2 llaves iguales en SQL Server

Saludos...
  #2 (permalink)  
Antiguo 18/12/2009, 11:49
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Error en un campo con llave primaria

no, cuando un campo es llave, no se puede repetir (es validado por sql server)

y el identity a menos que tu lo reinicialices con un valor diferente, siempre ira incrementando segun el valor que configuraste..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 18/12/2009, 11:55
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Error en un campo con llave primaria

Ok, yo estoy de acuerdo en esa parte, básicamente lo que quiero saber es lo siguiente, para lo cual voy a exponer un ejemplo

Tabla: colores
Campos

id (llave primaria, identidad, int)
color nvarchar(20)

Llega usuario A e ingresa un colo nuevo "azul" a las 10:00 a.m
LLega usuario B e ingresa color nuevo "rojo" a las 10:01 a.m.

Todo entra en una transaccion.

Operacion Normal
La operacion del usuario A toma el valor 1 en el campo ID
La operacion del usuario B toma el valor 2 en el campo ID

Operacion con error, se lleva a cabo un rollback
La operacion del usuario A toma el valor 1 en el campo ID, pero marca error al ingresar el registro
En este caso ¿Que valor de id genera la segunda operacion? ¿Porque?
La operacion del usuario B toma el valor 1 en el campo ID por que exisitio un rollback?
La operacion del usuario B toma el valor 2 en el campo ID???

Ojala me haya podido explicar

Saludos...
  #4 (permalink)  
Antiguo 18/12/2009, 12:03
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Error en un campo con llave primaria

No creo que debas preocuparte por eso, ya que es manejado por el engine de SQL, asegurar la integridad de la informacion..

Segun recuerdo una operacion de insercion bloquea la tabla por lo que no podria estar pendientes mas de 1 transaccion con insert. Es decir, la segunda transacion debera esperar el commit o rollback de la primera para poder continuar..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 18/12/2009, 12:29
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Error en un campo con llave primaria

El detalle es que en una aplicacion se me presento este caso:

Tengo estacion de trabajo numero 1 y me genero el id 34 y justo 1 minuto despues la estacion de trabajo 2 me genero el id 34. Tal como dices, al ser transaccional me toma el inmediato siguiente y pone en cola de espera los inserts (por decirlo de algun modo) pero que pasa si ocurre un rollback...entonces el insert me tomará el numero que no se utilizo???? o que se desecho o generará un nuevo numero???

Saludos...
  #6 (permalink)  
Antiguo 18/12/2009, 13:30
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Error en un campo con llave primaria

No, tomaria el siguiente...por eso no es bueno tomar un identity como parte de la informacion, solo como identificador del registro

Código:
if object_id('tempdb..#MiTemp') is not null drop table #MiTemp

create table #MiTemp(iid int identity(1,1), vcInfo varchar(100) )

Insert into #MiTemp(vcInfo) Values('A')
Insert into #MiTemp(vcInfo) Values('B')
Insert into #MiTemp(vcInfo) Values('C')
Insert into #MiTemp(vcInfo) Values('D')

BEGIN TRAN
Insert into #MiTemp(vcInfo) Values('E')
Insert into #MiTemp(vcInfo) Values('F')

SELECT * FROM #MiTemp WITH (NOLOCK) ORDER BY iid
ROLLBACK


Insert into #MiTemp(vcInfo) Values('G')
Insert into #MiTemp(vcInfo) Values('H')


SELECT * FROM #MiTemp WITH (NOLOCK) ORDER BY iid
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 18/12/2009, 13:45
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Error en un campo con llave primaria

Perfecto lo probe y en efecto no existe error en el identificador. Por lo que tendré que analizar la informacion de otra manera

Gracias,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:16.