![]() |
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. |
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 + ") :ojotes: :ojotes: :ojotes: Que demonios es eso de DBCC? Donde puedo hallar mas informacion? |
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. |
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 |
| La zona horaria es GMT -6. Ahora son las 21:04. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.