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

Problema con Primary Keys

Estas en el tema de Problema con Primary Keys en el foro de Bases de Datos General en Foros del Web. Hola, tengo un problema con una tabla en SQL Server 2k. Esa tabla llamada familia tiene dos columnas llamadas id_fam y titre_fam. id_fam es la ...
  #1 (permalink)  
Antiguo 20/08/2004, 04:09
Avatar de Txukie  
Fecha de Ingreso: junio-2004
Ubicación: Al Oeste del Nervion
Mensajes: 47
Antigüedad: 19 años, 10 meses
Puntos: 0
Busqueda Problema con Primary Keys

Hola, tengo un problema con una tabla en SQL Server 2k. Esa tabla llamada familia tiene dos columnas llamadas id_fam y titre_fam. id_fam es la clave primaria, es autonumerica y el primary key se llama PK_Familia.
Necesito hacer una consulta que me saque el valor que id_fam adoptara la proxima vez que inserte un registro en esa tabla, es decir, si el ultimo registro ahora mismo tiene id_fam=64 no necesariamente el siguiente debe ser 65 porque ando borrando y añadiendo registros a esa tabla constantemente y me puede salir un id_fam no consecutivo con los anteriores, no se si me explico. A ver si alguien me puede ayudar porfavor.
EDITO: Me serviria tanto una forma para hacer que los index sean consecutivos como (mejor esto si es posible) averiguar cual va a ser el siguiente valor de id_fam.

Última edición por Txukie; 20/08/2004 a las 04:13
  #2 (permalink)  
Antiguo 23/08/2004, 01:30
Avatar de Txukie  
Fecha de Ingreso: junio-2004
Ubicación: Al Oeste del Nervion
Mensajes: 47
Antigüedad: 19 años, 10 meses
Puntos: 0
Bueno, nadie contesta, de todas formas he encontrado una solucion, aunque no tengo ni idea de porque funciona. Si alguna mente privilegiada sabe de que va esto que nos lo cuente.
Una variable id_famo me coge el valor del ultimo id_fam del ultimo registro existente. Luego ejecuto este SQL.
DBCC CHECKIDENT('famille',RESEED," + id_famo + ")
Que demonios es eso de DBCC? Donde puedo hallar mas informacion?
  #3 (permalink)  
Antiguo 23/08/2004, 02:01
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Sacado de la ayuda de SQL-Server

Referencia de Transact-SQL


DBCC CHECKIDENT
Comprueba el valor de identidad actual de la tabla especificada y, si fuera necesario, corrige el valor de identidad.

Sintaxis
DBCC CHECKIDENT
( 'table_name'
[ , { NORESEED
| { RESEED [ , new_reseed_value ] }
}
]
)

Argumentos
'table_name'

Es el nombre de la tabla en la que se va a comprobar el valor de identidad actual. Los nombres de tablas se deben ajustar a las reglas para los identificadores. Para obtener más información, consulte Utilizar identificadores. La tabla especificada tiene que contener una columna de identidad.

NORESEED

Especifica que el valor de identidad actual no se debe corregir.

RESEED

Especifica que el valor de identidad actual se tiene que corregir.

new_reseed_value

Es el valor que se va a utilizar al reinicializar la columna de identidad.

Observaciones
Si es necesario, DBCC CHECKIDENT corrige el valor de identidad actual de una columna. Sin embargo, el valor de identidad actual no se corrige si la columna de identidad ha sido creada con la cláusula NOT FOR REPLICATION (en la instrucción CREATE TABLE o ALTER TABLE).

Una información de identidad no válida puede provocar el mensaje de error 2627 cuando hay una restricción de clave principal o única en la columna de identidad.

Las correcciones concretas hechas en el valor de identidad actual dependen de las especificaciones de los parámetros.

Instrucción DBCC CHECKIDENT Correcciones de identidad realizadas
DBCC CHECKIDENT ('table_name', NORESEED) No se restablece el valor de identidad actual. DBCC CHECKIDENT devuelve un informe que indica el valor de identidad actual y el valor que debería tener.
DBCC CHECKIDENT ('table_name') o DBCC CHECKIDENT ('table_name', RESEED) Si el valor de identidad actual de una tabla es menor que el valor de identidad máximo almacenado en la columna, se restablece con el valor máximo de la columna de identidad.
DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) El valor de identidad actual se restablece a new_reseed_value. Si no se ha insertado ninguna fila en la tabla desde su creación, la primera fila insertada después de ejecutar DBCC CHECKIDENT utilizará new_reseed_value como la identidad. En caso contrario, la siguiente fila insertada utilizará new_reseed_value +1. Si el valor de new_reseed_value es menor que el valor máximo de la columna de identidad, se generará el mensaje de error 2627 en las siguientes referencias a la tabla.


El valor de identidad actual puede ser mayor que el valor máximo de la tabla. DBCC CHECKIDENT no restablece automáticamente el valor de identidad actual en este caso. Para restablecer el valor de identidad actual cuando sea mayor que el valor máximo de la columna, utilice uno de estos dos métodos:

Ejecute DBCC CHECKIDENT ('table_name', NORESEED) para determinar el valor máximo actual de la columna, y, a continuación, especifique dicho valor como new_reseed_value en la instrucción DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value).


Ejecute DBCC CHECKIDENT ('table_name', RESEED, new_reseed_value) con new_reseed_value establecido a un valor muy bajo, y, a continuación, ejecute DBCC CHECKIDENT ('table_name', RESEED).
Conjuntos de resultados
Se especifiquen o no cualquiera de las opciones (para una tabla que contenga una columna de identidad; este ejemplo utiliza la tabla jobs de la base de datos pubs), DBCC CHECKIDENT devuelve este conjunto de resultados (los valores pueden variar):

Checking identity information: current identity value '14', current column value '14'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Permisos
De forma predeterminada, tienen derechos de ejecución de DBCC CHECKIDENT el propietario de la tabla, los miembros de la función fija de servidor sysadmin y las funciones fijas de base de datos db_owner y db_ddladmin y no se pueden transferir.

Ejemplos
A. Restablecer el valor de identidad actual si es necesario
En este ejemplo se restablece el valor de identidad actual, si es necesario, de la tabla jobs.

USE pubs
GO
DBCC CHECKIDENT (jobs)
GO

B. Informar del valor de identidad actual
En este ejemplo se informa del valor de identidad actual de la tabla jobs, y no se corrige el valor de identidad, si fuera incorrecto.

USE pubs
GO
DBCC CHECKIDENT (jobs, NORESEED)
GO

C. Establecer el valor de identidad actual en 30
En este ejemplo se establece el valor de identidad actual de la tabla jobs en 30.

USE pubs
GO
DBCC CHECKIDENT (jobs, RESEED, 30)
GO


Véase también

ALTER TABLE

CREATE TABLE

DBCC

IDENTITY (propiedad)

USE

©1988-2000 Microsoft Corporation. Reservados todos los derechos.
  #4 (permalink)  
Antiguo 28/02/2008, 07:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 1
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Problema con Primary Keys

Hola quisiera hacer una consulta, con esta opcion puedo resetear la la propiedad identidad a un valor determinar, como puedo hacer para dejar la propiedad como IDENTITY = NO utilizando sql no cambiando por el modo gráfico y que se mantenga asi despues de salir de ejecutar el codigo, tampoco me ha servido SET IDENTITY_INSERT table ON ya que cuando salgo el cambio no queda permanente tambien necesito un codigo para volver a IDENTITY = YES

Muchas Gracias por su ayuda
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 10:10.