[MS-SQL] Comment faire le Limit [offset] du MySQL

du MySQL [MS-SQL] Comment faire le Limit [offset] - SQL/NoSQL - Programmation

Marsh Posté le 13-01-2004 à 19:40:58    

Je cherche à reproduire la même chose que mySQL
du genre select * from matable limit 2,5
 
la commande TOP dans mSSQL ne permet pas de commencer à partir de la ligne qu'on veut..
 
J'ai vu aussi un truc similiaire avec oledbdataadapter
 
myAdapter.Fill(DataSet,startIndex,Nb_Rows,"NomTable" )
 
mais cela a l'air de retourner l'ensemble des lignes et de remplir la table de la ligne StartIndex jusqu a StartIndex+Nb_rows.
 
J'aimerais que la commande SQL renvoit directement et seulement les lignes concernées.
Quelqu un a une idée ?

Reply

Marsh Posté le 13-01-2004 à 19:40:58   

Reply

Marsh Posté le 13-01-2004 à 20:08:17    

Cela n'existe pas en MS-SQL.
 
Il faut faire une sous-requête avec des TOP(10)
 

Reply

Marsh Posté le 13-01-2004 à 20:11:46    

tu fais ca comment au juste ?

Reply

Marsh Posté le 13-01-2004 à 20:38:55    

SELECT TOP 10 name from table WHERE name NOT IN(SELECT TOP 20 ...)
 
retourne les éléments de 20 à 30

Reply

Marsh Posté le 13-01-2004 à 20:42:18    

ah ouais pas bête du tout !!

Reply

Marsh Posté le 13-01-2004 à 20:44:50    

c'est vrai que quand on est habitué à limit(20,10), cette méthode s'apparente un peu à du bricolage.... Mais je me suis renseigné, j'ai pas trouvé de façon plus simple de le faire.  

Reply

Marsh Posté le 13-01-2004 à 20:49:22    

ben si tu n'es pas pressé par les performances et que tu utilises ADO.Net . Tu peux utiliser un DataAdapter comme je le disais plus haut..
Adapter.Fill(oDataset,startindex,Number_Rows,"nomtable" ).
Mon problème moi c'est que je veux sortir 50 lignes a la fois sur un ensemble de 50000 lignes environ.. et j ai toujours TimeoutExpired de SQL.. Alors je cherche le moyen le plus rapide !

Reply

Marsh Posté le 13-01-2004 à 20:51:57    

lol. t'aurais pu réagir avant d'avoir des problèmes de Timeout...

Reply

Marsh Posté le 13-01-2004 à 21:26:55    

ben j ai besoin de toutes les lignes !!!

Reply

Marsh Posté le 22-01-2004 à 08:43:08    

Code :
  1. str_sql = _
  2.    "SELECT MIN(Mes_1.mes_date), MAX(Mes_1.mes_date) " & _
  3.    "FROM " & _
  4.    "(" & _
  5.     "SELECT TOP " & arr_param(1) & " Mes_1.mes_date " & _
  6.     "FROM " & _
  7.     "(" & _
  8.      "SELECT TOP " & arr_param(2) & " Mes_1.mes_date " & _
  9.      "FROM Messages Mes_1 " & _
  10.      "WHERE Mes_1.mes_suj_identifiant = " & arr_param(0) & " " & _
  11.       "ORDER BY Mes_1.mes_date ASC" & _
  12.     " ) " & _
  13.     "ORDER BY Mes_1.mes_date DESC" & _
  14.    " )"


 
Essayes ça sur des index, c'est très rapide, et cela remplace le limit sans problème. Par contre, c'est beaucoup plus chaud à utiliser....

Reply

Marsh Posté le 22-01-2004 à 08:43:08   

Reply

Marsh Posté le 22-01-2004 à 15:03:40    

++ pour gordon, parceque la méthode de jag est d'une lenteur abominable pour peut que tu as beaucoup de lignes. alors que celle-ci reste très rapide (ça ajoute à peine 10% de temps par rapport à un top x simple, alors que la méthode de jag est plutôt du style exponentielle au niveau temps.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed