He leído que después de SQL Server 2000, se eliminó la capacidad de "desidentificar" una columna de identidad. Y que esto era "Por diseño" (no solo una característica faltante).
Aquí hay un ejemplo que encontré en un blog . Implica actualizar las tablas del sistema. (Y esa capacidad se eliminó después de SQL Server 2000). Entiendo que hacer esto a través de tablas del sistema no es una buena idea. Me pregunto por qué no existe una característica para hacer esto de otra manera.
Trabajar alrededor de esto me va a causar una cantidad considerable de trabajo. (Copiar muchos cientos de millones de filas en nuevas tablas en un entorno intolerante de tiempo de inactividad).
Así que pensé en preguntar "por qué".
¿Qué cambió en Sql Server 2005 y versiones posteriores que hicieron de esto algo malo? ¿O siempre fue malo y simplemente no se bloqueó?
¿Qué "mejor práctica" (o principio similar) se violaría al hacer que una columna de identidad vuelva a ser una columna normal?
-
Actualización para responder la solicitud de "por qué estoy haciendo esto":
Este es un resumen de muy alto nivel: voy a comenzar a agregar particiones a mis tablas. (Para poder archivar / purgar datos antiguos). Todo eso es fácil. Pero ocasionalmente necesito mover un registro a una partición diferente para que no se elimine (cuando aparece una partición para archivar / eliminar). (Estoy haciendo que mi columna de partición aumente en 2 para que siempre haya espacio para mover la fila a una partición diferente).
Pero si la columna de partición es una columna de identidad, entonces tengo que eliminar y volver a insertar el valor (no hay forma de actualizar el valor de una columna de identidad). Lo que causa problemas con la replicación.
Por lo tanto, quiero usar una secuencia en lugar de una columna de identidad. Pero ese cambio es muy muy difícil en grandes bases de datos.
fuente
..SWITCH..
solo funcionaba para tablas que tenían al menos una partición definida.SWITCH
no requiere Enterprise Edition, aunque la partición de tablas sí.