{"id":169,"date":"2007-04-03T14:49:01","date_gmt":"2007-04-03T12:49:01","guid":{"rendered":"http:\/\/luca.lovalvo.net\/1_luca_lo_valvo\/archive\/178_fonction_function_limit_ms_sql_microsoft_sql_serveur.html"},"modified":"2022-11-04T15:59:15","modified_gmt":"2022-11-04T14:59:15","slug":"fonction-function-limit-ms-sql-microsoft-sql-serveur","status":"publish","type":"post","link":"https:\/\/luca.lovalvo.ch\/blog\/fonction-function-limit-ms-sql-microsoft-sql-serveur\/","title":{"rendered":"Fonction (function) LIMIT MS SQL (Microsoft SQL Serveur)"},"content":{"rendered":"<p>Oui alors les d&eacute;biles profont de chez Microsoft, qui n&#39;ont toujours rien compris &agrave; la vie, comme d&#39;ab n&#39;ont pas pens&eacute; &agrave; impl&eacute;menter la fonction Limit.<br \/>Vous savez cette fonction tr&egrave;s pratique sous MySQL pour afficher les r&eacute;sultats entre deux valeurs (records).<br \/>Exemple, afficher le contenu entre le 10&egrave;me et le 20&egrave;me record dans la base.<br \/>C&rsquo;est vrais que c&rsquo;est pas utile, du tout !!!<\/p>\n<p>&nbsp;<\/p>\n<p>Donc sous Mysql, on ferais b&ecirc;tement un <\/p>\n<p> SELECT * FROM MaTable Limit 10,20<br \/> Qui afficheront les donn&eacute;e entre la position 10 &agrave; la position 20 (10,11,12,13,14,15,16,17,18,19)<\/p>\n<p> Bah sous MSSQL, ils ont jug&eacute; que c&#39;&eacute;tait pas pratique, nous limitant a la fonction TOP (qui permet d&#39;afficher uniquement les X premier r&eacute;sultat.)<br \/> Donc<br \/> SELECT TOP 10 * (affiche les r&eacute;sulats 0 &agrave; 9), ou SELECT TOP 20 * (0 &agrave; 19 etc&#8230;).<br \/> Mais impossible par une fonction toute int&eacute;gr&eacute;e de lui dire d&#39;afficher ce qu&#39;il y a entre 10 et 20.<\/p>\n<p> Il faut donc pour cela, &quot;d&eacute;tourner le probl&egrave;me&quot; en imbriquant des &quot;SELECT&quot;.<\/p>\n<p>Exemple :&nbsp;<\/p>\n<p><font color=\"#99cc00\">SELECT TOP 10<\/font> * From <font color=\"#3366ff\">MaTable<\/font> <br \/> where <font color=\"#ff0000\">iddata<\/font>&nbsp; NOT IN<br \/> (<font color=\"#808000\">SELECT TOP 20<\/font> <font color=\"#ff0000\">iddata<\/font> from <font color=\"#3366ff\">MaTable<\/font> ORDER By <font color=\"#999999\">LaDate<\/font> DESC) <br \/> ORDER BY <font color=\"#999999\">LaDate<\/font> DESC;<\/p>\n<p> Explication :<br \/> <font color=\"#99cc00\">SELECT TOP 10<\/font> &lt;= 10 &eacute;tant le nombre de ligne &agrave; extraire.<br \/> <font color=\"#808000\">SELECT TOP 20 <\/font>&lt;= La position ou partir.<\/p>\n<p> Notre exemple, retourne donc les lignes entre le records 20 et 30 (20,21,22,23,24,25,26,27,28,29) <\/p>\n<p>&nbsp;Il est important de se bas&eacute; sur une valeur unique, comme l&#39;id (dans notre exemple, l&#39;iddata) du record, afin que la requ&ecirc;te fonctionne.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><u>Autre solution trouv&eacute;e sur le net (Merci <a href=\"http:\/\/blog.crox.net\">Alex<\/a>)<\/u><br \/>select * from (<br \/>&nbsp;select top 10 emp_id,lname,fname from (<br \/>&nbsp;&nbsp;&nbsp; select top 30 emp_id,lname,fname<br \/>&nbsp;&nbsp;&nbsp; from employee<br \/>&nbsp;&nbsp; order by lname asc<br \/>&nbsp;) as newtbl order by lname desc<br \/>) as newtbl2 order by lname asc <\/p>\n<p>TAG : <a href=\"http:\/\/luca.lovalvo.net\/blog\/luca_lo_valvo\/programmation\/2007\/04\/03\/fonction_function_limit_ms_sql_microsoft_sql_serveur\">MSSQL<\/a> <a href=\"http:\/\/luca.lovalvo.net\/blog\/luca_lo_valvo\/programmation\/2007\/04\/03\/fonction_function_limit_ms_sql_microsoft_sql_serveur\">MYSQL<\/a> <a href=\"http:\/\/luca.lovalvo.net\/blog\/luca_lo_valvo\/programmation\/2007\/04\/03\/fonction_function_limit_ms_sql_microsoft_sql_serveur\">LIMIT<\/a> <a href=\"http:\/\/luca.lovalvo.net\/blog\/luca_lo_valvo\/programmation\/2007\/04\/03\/fonction_function_limit_ms_sql_microsoft_sql_serveur\">TOP<\/a> <a href=\"http:\/\/luca.lovalvo.net\/blog\/luca_lo_valvo\/programmation\/2007\/04\/03\/fonction_function_limit_ms_sql_microsoft_sql_serveur\">SELECT<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oui alors les d&eacute;biles profont de chez Microsoft, qui n&#39;ont toujours rien compris &agrave; la vie, comme d&#39;ab n&#39;ont pas pens&eacute; &agrave; impl&eacute;menter la fonction Limit.Vous savez cette fonction tr&egrave;s pratique sous MySQL pour afficher les r&eacute;sultats entre deux valeurs (records).Exemple, afficher le contenu entre le 10&egrave;me et le 20&egrave;me record dans la base.C&rsquo;est vrais [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-169","post","type-post","status-publish","format-standard","hentry","category-programmation"],"_links":{"self":[{"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/posts\/169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/comments?post=169"}],"version-history":[{"count":1,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/posts\/169\/revisions"}],"predecessor-version":[{"id":380,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/posts\/169\/revisions\/380"}],"wp:attachment":[{"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/media?parent=169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/categories?post=169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/luca.lovalvo.ch\/blog\/wp-json\/wp\/v2\/tags?post=169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}