"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo incrementar automáticamente una columna sin identidad en SQL Server 2005 sin ORDER BY?

¿Cómo incrementar automáticamente una columna sin identidad en SQL Server 2005 sin ORDER BY?

Publicado el 2024-12-23
Navegar:944

How to Auto-Increment a Non-Identity Column in SQL Server 2005 Without ORDER BY?

Generación de ID de incremento automático en SQL Server 2005 sin ORDER BY

La necesidad de insertar datos de una tabla en otra mientras se realiza el incremento automático una columna sin identidad puede ser un desafío. El enfoque estándar implica usar un cursor o crear una variable de tabla, pero esto puede ser ineficiente.

En ausencia de un campo ORDER BY legítimo, se puede emplear la función ROW_NUMBER. Sin embargo, la ausencia de un orden explícito no garantiza la conservación del orden de los datos originales. Esto se debe a que "no ordenado" es distinto de "conservar el orden original".

Para solucionar este problema, una solución implica evitar el orden explícito de la siguiente manera:

INSERT dbo.TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
        Coalesce(
         (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM dbo.SourceTable
WHERE {somecondition};

Este enfoque calcula el ID máximo e inserta datos mientras adquiere bloqueos para evitar errores de concurrencia.

Sin embargo, tenga en cuenta que se recomienda encarecidamente utilizar una columna de identidad, ya que elimina la necesidad para bloquear y garantiza una concurrencia óptima. Las columnas de identidad proporcionan una solución más eficiente y sólida para el incremento automático de ID en SQL Server.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3