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

Comment puis-je utiliser ROW_NUMBER() sans ORDER BY dans SQL Server 2005 ?

Susan Sarandon
Libérer: 2024-12-24 14:52:15
original
656 Les gens l'ont consulté

How Can I Use ROW_NUMBER() Without ORDER BY in SQL Server 2005?

ROW_NUMBER() sans ORDER BY dans SQL Server 2005

Dans SQL Server 2005, la fonction ROW_NUMBER() peut être utilisée pour générer un numéro séquentiel unique pour chaque ligne d'un jeu de résultats. Cependant, contrairement à ses homologues des versions ultérieures, ROW_NUMBER() dans SQL Server 2005 nécessite une clause ORDER BY explicite. Cette limitation pose un défi lorsqu'on tente de générer des nombres séquentiels sans modifier l'ordre d'origine des données.

Solution :

Pour contourner cette limitation, nous pouvons éviter de spécifier un ordre explicite utilisant la requête suivante syntaxe :

INSERT INTO TargetTable (ID, FIELD)
SELECT
   Row_Number() OVER (ORDER BY (SELECT 1))
      + Coalesce(
         (SELECT Max(ID) FROM TargetTable WITH (TABLOCKX, HOLDLOCK)),
         0
      ),
   FieldValue
FROM SourceTable
WHERE {somecondition};
Copier après la connexion

Explication :

  • Le ORDER BY le plus à l'extérieur (SELECT 1) sert d'espace réservé, évitant efficacement tout ordre explicite.
  • Les astuces WITH (TABLOCKX, HOLDLOCK) sont utilisées pour éviter les problèmes de concurrence en garantissant une table exclusive verrous.

Considérations :

  • Cette solution de contournement ne garantit pas que l'ordre d'origine des données sera préservé. D'autres facteurs, tels que les verrous et les processus simultanés, peuvent affecter l'ordre résultant.
  • Ce n'est pas aussi efficace que l'utilisation d'une colonne d'identité pour l'auto-incrémentation.
  • L'utilisation d'une colonne d'identité est la solution préférée. solution pour des raisons de concurrence et de performances.

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