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

Comment puis-je incrémenter automatiquement une colonne sans identité dans SQL Server 2005 sans utiliser ORDER BY dans ROW_NUMBER() ?

Linda Hamilton
Libérer: 2024-12-26 18:44:09
original
487 Les gens l'ont consulté

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

Éviter ORDER BY dans SQL Server 2005 ROW_NUMBER()

Lors de l'insertion de données d'une table dans une autre, il est souvent souhaitable d'incrémenter automatiquement une colonne de non-identité dans la table cible. Bien que la fonction ROW_NUMBER() puisse être utilisée pour y parvenir, elle nécessite généralement un champ ORDER BY. Cependant, si l'ordre original de la table source doit être conservé, il est nécessaire de trouver une approche alternative.

Une solution qui évite l'ordre explicite implique le code suivant :

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

Ce code utilise une fonction de fenêtre pour calculer les numéros de ligne en fonction d'une valeur constante, remplaçant ainsi le besoin d'une clause ORDER BY. De plus, pour éviter les problèmes de concurrence, la requête utilise des indicateurs de verrouillage (TABLOCKX et HOLDLOCK) lors du calcul de la valeur maximale dans la table cible.

Il est important de noter que même si cette approche évite de spécifier explicitement un ordre, elle ne le fait pas. Cela ne garantit pas que l'ordre d'origine de la table source sera préservé. Des facteurs tels que l’ordre des requêtes externes peuvent toujours influencer le résultat. Du point de vue d'une base de données, le concept de « conservation de l'ordre d'origine » n'existe pas vraiment.

Pour une simultanéité et une intégrité des données optimales, l'utilisation d'une colonne d'identité est fortement recommandée pour cette solution de contournement. Le verrouillage exclusif de la table via les indices de verrouillage doit être évité sauf en cas d'absolue nécessité.

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