Maison > base de données > tutoriel mysql > 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 ?

Mary-Kate Olsen
Libérer: 2024-12-30 02:59:24
original
992 Les gens l'ont consulté

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'auto-incrémentation une colonne sans identité peut être un défi. L'approche standard consiste à utiliser un curseur ou à créer une variable de table, mais celles-ci peuvent être 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 commandé » est distinct de « conserver l'ordre d'origine ».

Pour résoudre ce problème, une solution consiste à éviter la commande 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};
Copier après la connexion

Cette approche calcule le Max ID 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 de verrouillage et garantit une concurrence. Les colonnes d'identité offrent une solution plus efficace et plus robuste pour l'incrémentation automatique des identifiants dans SQL Server.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal