"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment incrémenter automatiquement une colonne sans identité dans SQL Server 2005 sans ORDER BY ?

Comment incrémenter automatiquement une colonne sans identité dans SQL Server 2005 sans ORDER BY ?

Publié le 2024-12-23
Parcourir:935

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

Génération d'ID à incrémentation automatique dans SQL Server 2005 sans ORDER BY

La nécessité d'insérer des données d'une table dans une autre lors de l'incrémentation automatique une colonne sans identité peut être un défi. L'approche standard implique l'utilisation d'un curseur ou la création d'une variable de table, mais celles-ci peuvent s'avérer inefficaces.

En l'absence de champ ORDER BY légitime, la fonction ROW_NUMBER peut être utilisée. Cependant, l’absence d’ordre explicite ne garantit pas la préservation de l’ordre original des données. En effet, « non ordonné » est distinct de « conserver l'ordre d'origine ».

Pour résoudre ce problème, une solution consiste à éviter l'ordre explicite comme suit :

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};

Cette approche calcule l'ID maximum et insère des données lors de l'acquisition de verrous pour éviter les erreurs de concurrence.

Cependant, notez que l'utilisation d'une colonne d'identité est fortement recommandée car elle élimine le besoin pour le verrouillage et assure une concurrence optimale. Les colonnes d'identité fournissent une solution plus efficace et plus robuste pour l'incrémentation automatique des ID dans SQL Server.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3