{"id":1221,"date":"2012-04-18T09:14:09","date_gmt":"2012-04-18T08:14:09","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1221"},"modified":"2012-04-18T09:14:09","modified_gmt":"2012-04-18T08:14:09","slug":"sql-server-2012-ujdonsagok-3-paging","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2012\/04\/18\/sql-server-2012-ujdonsagok-3-paging\/","title":{"rendered":"SQL Server 2012 \u00fajdons\u00e1gok &#8211; 3. Paging"},"content":{"rendered":"<p>A legt\u00f6bb alkalmaz\u00e1s tartalmaz olyan funkci\u00f3t, amelyekben rendezett, nagy eredm\u00e9nyhalmazokat kell kisebb darabokban, lapozva megjelen\u00edteni. Gondoljunk pl. a keres\u00e9s funkci\u00f3ra, amikben ha sok eredm\u00e9ny j\u00f6nne vissza, nem z\u00fad\u00edtjuk azt az alkalmaz\u00e1s nyak\u00e1ba, csak megmutatjuk az els\u0151 p\u00e9ld\u00e1ul 10 eredm\u00e9nyt, majd lehet\u0151s\u00e9get biztos\u00edtunk a felhaszn\u00e1l\u00f3knak, hogy megn\u00e9zhess\u00e9k a 11-20. eredm\u00e9nyt, stb.<br \/>\n\u00c1ltal\u00e1ban ezt nagy eredm\u00e9nyhalmaz egy kis r\u00e9sz\u00e9nek megjelen\u00edt\u00e9s\u00e9t h\u00edvj\u00e1k lapoz\u00e1si feladatnak. Kor\u00e1bbi SQL Server verzi\u00f3kban erre t\u00f6bbf\u00e9le megold\u00e1st is haszn\u00e1ltunk. Lehetett alkalmazni szerveroldali kurzorokat, tr\u00fckk\u00f6s egym\u00e1sba \u00e1gyazott ORDER BY-os \u00e9s TOP-os lek\u00e9rdez\u00e9seket, SQL Server 2005-t\u0151l a ROW_NUMBER sorsz\u00e1mgener\u00e1l\u00f3 f\u00fcggv\u00e9nyt WHERE meg\u00e1ll\u00e1si felt\u00e9tellel kombin\u00e1lva, \u00ednyenceknek CTE-be csomagolva. Ahogy haladtunk el\u0151re az \u00fajabb SQL Server verzi\u00f3k fel\u00e9, \u00fagy lett egyre egyszer\u0171bb ilyen lek\u00e9rdez\u00e9seket \u00edrni.<br \/>\nAz SQL Server 2012-re kialakult az a form\u00e1tum, amin\u00e9l m\u00e1r val\u00f3sz\u00edn\u0171leg nem lehet tov\u00e1bb egyszer\u0171s\u00edteni a feladat megold\u00e1s\u00e1t.<br \/>\nAz ORDER BY kieg\u00e9sz\u00fclt a lapoz\u00e1st lehet\u0151v\u00e9 tev\u0151 \u00faj elemekkel: ORDER BY OFFSET n ROWS \u00e9s FETCH NEXT n ROWS ONLY. A n \u00e9rt\u00e9k lehet v\u00e1ltoz\u00f3 vagy param\u00e9ter is, \u00edgy param\u00e9terezett t\u00e1rolt elj\u00e1r\u00e1sokban is k\u00e9nyelmesen haszn\u00e1lhat\u00f3 a lapoz\u00e1s.<br \/>\nP\u00e9ld\u00e1ul az AdventureWorks2012 adatb\u00e1zis Person t\u00e1bl\u00e1j\u00e1b\u00f3l ha lev\u00e1logatjuk az A bet\u0171vel kezd\u0151d\u0151 keresztnev\u0171 szem\u00e9lyeket, akkor 2014 sort kapunk vissza:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT FirstName, LastName, BusinessEntityID\r\nFROM &#x5B;AdventureWorks2012].&#x5B;Person].&#x5B;Person]\r\nwhere FirstName like &#039;A%&#039;\r\norder by FirstName, LastName;\r\n<\/pre>\n<p>Az els\u0151 33 sor:<br \/>\n<a href=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontable.png\"><img loading=\"lazy\" decoding=\"async\" width=\"266\" height=\"646\" src=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontable.png\" alt=\"\" title=\"Person Table\" class=\"aligncenter size-full wp-image-1222\" srcset=\"https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontable.png 266w, https:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontable-123x300.png 123w\" sizes=\"auto, (max-width: 266px) 100vw, 266px\" \/><\/a><\/p>\n<p>Ennyit nem biztos, hogy a felhaszn\u00e1l\u00f3k nyak\u00e1ba szeretn\u00e9nk \u00f6nteni, de k\u00f6nnyed\u00e9n visszaadhatjuk lapozva is az eredm\u00e9nyeket:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nSELECT FirstName, LastName, BusinessEntityID\r\nFROM &#x5B;AdventureWorks2012].&#x5B;Person].&#x5B;Person]\r\nwhere FirstName like &#039;A%&#039;\r\norder by FirstName, LastName\r\noffset 20 rows\r\nfetch next 10 rows only;\r\n<\/pre>\n<p>A lapozott eredm\u00e9nyhalmaz:<br \/>\n<a href=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontablepaged.png\"><img loading=\"lazy\" decoding=\"async\" width=\"268\" height=\"209\" src=\"http:\/\/soci.hu\/blog\/wp-content\/uploads\/2012\/04\/persontablepaged.png\" alt=\"\" title=\"Person Table Paged\" class=\"alignnone size-full wp-image-1224\" \/><\/a><\/p>\n<p>L\u00e1that\u00f3, hogy Aaron Foster tal\u00e1lhat\u00f3 az els\u0151 sorban, \u0151 volt a 21. az eredeti eredm\u00e9nyhalmazban.<br \/>\nA lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1si terve k\u00f6zel azonos egy TOP oper\u00e1toros lek\u00e9rdez\u00e9s v\u00e9grehajt\u00e1si terv\u00e9vel (ami term\u00e9szetes, hisz egy top m\u0171velet van a h\u00e1tt\u00e9rben, csak el\u0151tte van egy skip is), \u00edgy a m\u00e1r ismert elvek alapj\u00e1n indexekkel k\u00f6nnyen optimaliz\u00e1lhat\u00f3 a SELECT v\u00e9grehajt\u00e1sa.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A legt\u00f6bb alkalmaz\u00e1s tartalmaz olyan funkci\u00f3t, amelyekben rendezett, nagy eredm\u00e9nyhalmazokat kell kisebb darabokban, lapozva megjelen\u00edteni. Gondoljunk pl. a keres\u00e9s funkci\u00f3ra, amikben ha&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30,78],"tags":[],"class_list":["post-1221","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2012"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1221"}],"version-history":[{"count":3,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1221\/revisions"}],"predecessor-version":[{"id":1226,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1221\/revisions\/1226"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}