Actualizar valores en la columna identidad
¿Cómo sobreescribo la columna de identidad en MSSQL? Lo intenté:
SET IDENTITY_INSERT GeoCountry ON
UPDATE GeoCountry SET CountryID = 18 WHERE CountryID = 250
Pero vuelvo a
Line 2: Cannot update identity column 'CountryID'.
5 answers
Está intentando realizar una actualización, no insertar nuevas filas.
Para hacer eso, tendrá que establecer identity_insert
EN y copiar la fila que desea actualizar a una nueva fila con el nuevo valor de ID, luego eliminar la fila anterior (suponiendo que no FK lo haga referencia)
Algo parecido a:
set identity_insert GeoCountry on
go
insert into GeoCountry (all columns including IDentity column)
select 18, (all columns except IDentity column)
from GeoCountry where CountryID = 250
-- Delete will only work if no referencing FK's
delete GeoCountry where CountryID = 250
set identity_insert GeoCountry off
go
[Dado que está tratando de actualizarlo, eso sugeriría que todavía está en uso (es decir, haciendo referencia a FK) y eso hace las cosas más complicadas...]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-10 10:01:36
No se puede actualizar la columna Identidad en SQL Server. Debe eliminar el registro original y, a continuación, insertar el registro con el valor de identidad porque no hay soporte para actualizar un valor de identidad.
Establecer Identity_Insert [ColumnName] On Insertar identidad e información adicional previamente almacenada en ese registro set Identity_Insert [ColumnName] Off
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-06 13:29:18
Si está tratando de actualizar una columna de identidad, aquí hay un enfoque posible:
- En SQL Server Management Studio, abra la tabla en la vista diseño, desactive "Especificación de identidad > Es identidad" en la columna
- Realizar actualizaciones
- Habilite "Especificación de identidad > Es identidad" en la columna
Haga un SELECT IDENT_CURRENT('<table name>')
para ver si devuelve el id más alto que está actualmente presente en la tabla.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-03 03:46:22
Si desea volver a numerar los valores de un campo de identidad, porque por ejemplo los valores se han vuelto locos, simplemente haga lo siguiente:
-
Abrir tabla en modo diseño haga clic en Especificación de identidad
Marca (es identidad) como NO (Su campo de identidad sigue siendo un PK)
Cerrar y guardar diseño
-
Abrir tabla en modo de edición Cambie los valores de su campo de identidad como desee (solo tenga en cuenta que no puede tener valores duplicados)
-
Cerrar la mesa y abrirla de nuevo en el modo de diseño Reemplace su campo de identidad (es identidad) a Sí.
Cierra la tabla y listo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-14 11:15:03
También podría hacer esto en una instrucción usando delete into, esto tiene la ventaja de eliminar cualquier error al copiar/mover los datos de la fila, por ejemplo
set identity_insert [dbo].[MyTableName] on
delete from [dbo].[MyTableName]
output
<new-id-value-here>,
[deleted].[Col1],
[deleted].[Col2],
[deleted].[Col3],
into
[dbo].[MyTableName] (
[IdColumnName],
[Col1],
[Col2],
[Col3])
where
[IdColumnName]=<old-id-value-here>
set identity_insert [dbo].[MyTableName] off
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-11 18:03:07