No puede actualizar la columna de identidad.
SQL Server no permite actualizar la columna de identidad a diferencia de lo que puede hacer con otras columnas con una declaración de actualización.
Aunque hay algunas alternativas para lograr un tipo similar de requisito.
- Cuándo debe actualizarse el valor de la columna Identidad para nuevos registros
Use DBCC CHECKIDENT que verifica el valor de identidad actual para la tabla y, si es necesario, cambia el valor de identidad.
DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
- Cuándo se debe actualizar el valor de la columna de identidad para los registros existentes
Use IDENTITY_INSERT que permite insertar valores explícitos en la columna de identidad de una tabla.
SET IDENTITY_INSERT YourTable {ON|OFF}
Ejemplo:
-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in the identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to the previous track
SET IDENTITY_INSERT YourTable OFF
UPDATE YourTable SET IdentityCol = 13
).SET IDENTITY_INSERT YourTable ON
solo permite INSERT, no ACTUALIZACIONES.Si tu pregunta es correcta, quieres hacer algo como
Déjame decirte que no es un proceso fácil y no es aconsejable usarlo, ya que puede haber algunos
foreign key
asociados.Pero aquí hay pasos para hacerlo, por favor tome una
back-up
mesaPaso 1- Seleccione la vista de diseño de la tabla
Paso 2- Desactiva la columna de identidad
Ahora puedes usar la
update
consulta.Ahora
redo
el paso 1 y el paso 2 y encienda la columna de identidadReferencia
fuente
:)
Necesitas
Luego, elimine su fila y vuelva a insertarla con una identidad diferente.
Una vez que haya realizado la inserción, no se olvide de desactivar identity_insert
fuente
fuente
Intenta usar
DBCC CHECKIDENT
:fuente
copie su tabla a una nueva tabla sin columna de identidad.
agregue una columna de identidad a newtable con nueva semilla y conviértala como clave principal
fuente
nombre_tabla = proporcione el valor de la tabla que desea restablecer
valor = valor inicial para ser cero, para iniciar la columna de identidad con 1
fuente
Cuando use Identity_Insert, no olvide incluir los nombres de columna porque sql no le permitirá insertar sin especificarlos
fuente
También puedes usar
SET IDENTITY INSERT
para permitirle insertar valores en una columna de identidad.Ejemplo:
Y luego puede insertar en una columna de identidad los valores que necesita.
fuente
Sin embargo, el código anterior solo funciona si no hay una relación de clave primaria-externa
fuente
Solución completa para programadores de C # usando el generador de comandos
En primer lugar, debes conocer estos hechos:
Entonces, una vez que sabes eso, lo que tienes que hacer es. Programe su propia instrucción de inserción SQL o programe su propio generador de comandos de inserción. O usa este que estoy programado para ti. Dada una tabla de datos, genera el script de inserción SQL:
fuente
He resuelto este problema primero usando DBCC y luego usando insert. Por ejemplo si tu mesa es
En primer lugar, establezca el nuevo valor de ID actual en la tabla como NEW_RESEED_VALUE
MyTable {IDCol, colA, colB}
entonces puedes usar
Esto duplicaría todos sus registros pero utilizando un nuevo valor IDCol que comience como NEW_RESEED_VALUE. Luego, puede eliminar filas duplicadas de mayor valor de ID una vez que haya eliminado / movido sus referencias de clave externa, si las hubiera.
fuente
Puede crear una nueva tabla con el siguiente código.
Luego elimine el db antiguo y cambie el nombre del nuevo db al nombre del antiguo db. Nota : esa columna1 y columna2 representan todas las columnas de su tabla anterior que desea mantener en su tabla nueva.
fuente
Si necesita específicamente cambiar el valor de la clave primaria a un número diferente (por ejemplo, 123 -> 1123). La propiedad de identidad bloquea el cambio de un valor PK. Establecer Identity_insert no va a funcionar. No es recomendable realizar una inserción / eliminación si tiene eliminaciones en cascada (a menos que desactive la comprobación de integridad referencial).
Este script desactivará la identidad en una PK:
A continuación, puede establecer las relaciones para que actualicen las referencias de clave externa. O bien, debe desactivar la aplicación de la relación. Este enlace SO muestra cómo: ¿Cómo se pueden deshabilitar temporalmente las restricciones de clave externa utilizando T-SQL?
Ahora puedes hacer tus actualizaciones. Escribí un script corto para escribir todo mi SQL de actualización basado en el mismo nombre de columna (en mi caso, necesitaba aumentar el CaseID en 1,000,000:
Por último, vuelva a habilitar la integridad referencial y luego vuelva a habilitar la columna Identidad en la clave primaria.
Nota: veo que algunas personas en estas preguntas preguntan por qué. En mi caso, tengo que fusionar datos de una segunda instancia de producción en una base de datos maestra para poder cerrar la segunda instancia. Solo necesito todos los PK / FK de datos de operaciones para no colisionar. Los metadatos FK son idénticos.
fuente