Maison >base de données >tutoriel mysql >Comment puis-je incrémenter automatiquement une colonne sans identité dans SQL Server 2005 à l'aide de ROW_NUMBER() ?

Comment puis-je incrémenter automatiquement une colonne sans identité dans SQL Server 2005 à l'aide de ROW_NUMBER() ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-27 01:10:10878parcourir

How Can I Auto-Increment a Non-Identity Column in SQL Server 2005 Using ROW_NUMBER()?

Utilisation de ROW_NUMBER() sans ORDER BY pour l'incrémentation automatique dans SQL Server 2005

Dans SQL Server 2005, incrémentation automatique d'un non- La colonne d'identité peut être difficile lorsque vous travaillez avec ROW_NUMBER() et en l'absence d'un critère ORDER BY approprié. Cependant, il existe des alternatives :

Utiliser ROW_NUMBER() avec une clause Order By constante :

Bien qu'il manque un champ ORDER BY valide, ROW_NUMBER() peut être combiné avec une clause de commande constante pour imiter l'auto-incrémentation :

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 méthode évite l'ordre explicite tout en garantissant l'unicité dans la colonne ID.

Mise en garde : Non-garantie de la commande originale :

Il est crucial de noter que cette approche ne garantit pas la préservation de la commande SourceTable originale. D'autres facteurs, tels que ORDER BY d'une requête externe, peuvent influencer l'ordre des résultats.

Considérations relatives à la concurrence :

Des conseils de verrouillage (TABLOCKX et HOLDLOCK) sont inclus dans le requête pour empêcher les processus simultanés d’insérer le même ID entre les étapes d’exécution de la requête. Cependant, cette approche n'est pas aussi efficace que l'utilisation d'une colonne d'identité et ne doit être considérée que comme une solution de contournement.

Solution recommandée : utilisez la colonne d'identité :

Pour des performances et des performances optimales. concurrence, il est fortement recommandé d'utiliser une colonne d'identité pour l'auto-incrémentation.

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!

Déclaration:
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