2009-12-31 3 views
0

J'ai une requête SELECT qui donne plusieurs résultats et n'a pas de clause ORDER BY. Si j'exécute cette requête plusieurs fois, puis que je parcours les résultats à l'aide de DataReader.NextResult(), serais-je sûr d'obtenir les résultats dans le même ordre?Est-ce que DataReader.NextResult récupère le résultat est toujours le même ordre

Par exemple. si j'exécute la requête suivante que le retour 199 lignes:

SELECT * FROM products WHERE productid < 200 

obtiendrais-je toujours le premier résultat avec ProductID = 1 et ainsi de suite? Dans la mesure où je l'ai observé, je renvoie toujours les résultats dans le même ordre, mais je ne trouve aucune documentation pour ce comportement.

======================================

Selon mes recherches : Consultez ce blog Conor vs. SQL. Je voulais en fait demander si le résultat de la requête change même si les données de la table restent les mêmes (ie pas de mise à jour ou de suppression). Mais il semble que dans le cas d'une grande table, lorsque le parallélisme des employés SQL Server, l'ordre peut être différent

Répondre

7

Tout d'abord, pour itérer les lignes dans un DataReader, vous devez appeler Read, pas NextResult.
L'appel NextResult passera au jeu de résultats suivant si votre requête a plusieurs instructions SELECT.

Pour répondre à votre question, vous ne devez pas compter sur cela.
Une requête sans clause ORDER BY renvoie des lignes dans l'ordre d'itération par défaut de SQL Server.
Pour les petites tables, sera généralement soit l'ordre dans lequel les lignes ont été ajoutées, mais cela n'est pas garanti et est susceptible de changer à tout moment. Par exemple, si la table est indexée ou partitionnée, l'ordre sera différent.

3

Non, DataReader renverra les résultats dans l'ordre où ils reviennent de SQL. Si vous ne spécifiez pas une clause ORDER BY, ce sera l'ordre dans lequel ils existent dans la table.

+0

Je suis d'accord avec Rory. Si vous le souhaitez dans un ordre spécifique, vous devez ajouter un Order By dans votre instruction SQL. – Walter

1

Il est possible, peut-être même probable qu'ils reviendront toujours dans le même ordre, mais ce n'est pas garanti. L'ordre est déterminé par le plan de requête (au moins dans SQL Server) sur le serveur de base de données. Si quelque chose change ce queryplan, l'ordre pourrait changer. Vous devez toujours utiliser ORDER BY si l'ordre des résultats est important pour le traitement des données.

Questions connexes