¿Cómo actualizar la columna de identidad en SQL Server?

Resuelto Abdulsalam Elsharif asked hace 10 años • 21 respuestas

Tengo una base de datos SQL Server y quiero cambiar la columna de identidad porque comenzó con un número grande 10010y está relacionada con otra tabla, ahora tengo 200 registros y quiero solucionar este problema antes de que aumenten los registros.

¿Cuál es la mejor manera de cambiar o restablecer esta columna?

Abdulsalam Elsharif avatar Oct 03 '13 16:10 Abdulsalam Elsharif
Aceptado

No se 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 existen algunas alternativas para lograr un tipo de requisito similar.

  • Cuándo es necesario actualizar el valor de la columna Identidad para nuevos registros

Utilice DBCC CHECKIDENT que verifica el valor de identidad actual de la tabla y, si es necesario, cambia el valor de identidad.

DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
  • Cuándo es necesario actualizar el valor de la columna Identidad para registros existentes

Utilice 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
Sachin avatar Oct 03 '2013 09:10 Sachin

Si respondiste bien tu pregunta, querrás hacer algo como

update table
set identity_column_name = some value

Déjame decirte que no es un proceso fácil y no es recomendable utilizarlo, ya que puede tener algunos foreign keyasociados.

Pero aquí hay pasos para hacerlo. Consulte la back-uptabla.

Paso 1: seleccione la vista de diseño de la tabla

ingrese la descripción de la imagen aquí

Paso 2- Desactiva la columna de identidad

ingrese la descripción de la imagen aquí

Ahora puedes usar la updateconsulta.

Ahora redoel paso 1 y el paso 2 y activar la columna de identidad.

Referencia

Prahalad Gaggar avatar Oct 03 '2013 10:10 Prahalad Gaggar

Necesitas

set identity_insert YourTable ON

Luego elimine su fila y vuelva a insertarla con una identidad diferente.

Una vez que haya realizado la inserción, no olvide desactivar Identity_insert.

set identity_insert YourTable OFF
R S P avatar Oct 03 '2013 11:10 R S P
--before running this make sure Foreign key constraints have been removed that reference the ID. 

--set table to allow identity to be inserted
SET IDENTITY_INSERT yourTable ON;
GO
--insert everything into a temp table
SELECT * 
INTO #tmpYourTable
FROM yourTable

--clear your table
DELETE FROM yourTable
--insert back all the values with the updated ID column
INSERT INTO yourTable (IDCol, OtherCols)
SELECT ID+1 as updatedID --put any other update logic to the ID here
, OtherCols FROM #tmpYourTable
--drop the temp table
DROP TABLE #tmpYourTable
--put identity back to normal
SET IDENTITY_INSERT yourTable OFF;
GO
kuklei avatar Apr 02 '2015 11:04 kuklei

Intenta usar DBCC CHECKIDENT:

DBCC CHECKIDENT ('YourTable', RESEED, 1);
Darren avatar Oct 03 '2013 09:10 Darren