<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/3336.aspx</link><pubDate>Wed, 06 Jul 2005 02:49:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:3336</guid><dc:creator>rousso</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/3336.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=3336</wfw:commentRss><description>&lt;p dir="ltr" style="MARGIN-RIGHT: 0px"&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Εκτός από όλα τα άλλα που γράφτηκαν παραπάνω για το θέμα σου δες επίσης στο patterns &amp;amp; practices &lt;a target="_blank" title="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenethowto05.asp" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenethowto05.asp"&gt;&lt;strong&gt;αυτό το αρθράκι&lt;/strong&gt; &lt;/a&gt;το οποίο έχει διάφορους τρόπους να σου προτείνει ανάλογα με το την περίπτωση...&lt;br /&gt;&lt;br /&gt;Πάντως αυτό με το ROWCOUNT&amp;nbsp;δεν είμαι σίγουρος ότι είναι η καλύτερη ιδέα. Εγώ θεωρούσα ότι το ROWCOUNT παρέμενε για λόγους backward compatibility με τον SQL 7 και δεν του έδινα σημασία, (εξάλλου γι αυτό υπάρχει και το TOP &lt;em&gt;n&lt;/em&gt;)&lt;em&gt;. &lt;/em&gt;Θα το δω όμως πιο προσεκτικά όταν έχω χρόνο και τα λέμε ξανά...&lt;br /&gt;&lt;br /&gt;Πάντως αυτό που εγώ θεωρώ πιο κομψό από όλα είναι μέσα στο άρθρο που προανέφερα και συνοψίζεται στον παρακάτω ψευδοκώδικα:&lt;br /&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;SELECT TOP &amp;lt;pageSize&amp;gt;&amp;nbsp;&amp;lt;Column1&amp;gt;, ..., &amp;lt;ColumnN&amp;gt;&lt;br /&gt;&amp;nbsp; FROM&lt;br /&gt;&amp;nbsp; (SELECT TOP &amp;lt;currentPageNumber * pageSize&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Column1&amp;gt;, ..., &amp;lt;ColumnN&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; FROM&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;YourTable&amp;gt; AS T1 ORDER BY&amp;nbsp;&amp;lt;SortColumn&amp;gt; DESC)&lt;br /&gt;&amp;nbsp; AS T2 ORDER BY &amp;lt;SortColumn&amp;gt; ASC&lt;br /&gt;&lt;br /&gt;Αυτό prepared μέσα σε ένα stored proc τρέχει μια χαρά και εφόσον έχεις και indexed το &amp;lt;SortColumn&amp;gt; ακόμα καλύτερα. &lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2890.aspx</link><pubDate>Fri, 17 Jun 2005 21:40:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2890</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2890.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2890</wfw:commentRss><description>&lt;p&gt;Πανο μπράβο! Εισαι αστείρευτος! Υποκλίνομαι!&lt;br /&gt;&lt;br /&gt;Οι παρατηρήσεις, για να μην παρεξηγηθώ, δεν είχαν μορφή κριτικής για τις προτεινόμενες λύσεις, ήταν απλά αυτά που μου έκαναν εντύπωση με την πρώτη ματιά. Φυσικά και χωρίς εφαρμογή σε συγκεκριμένη περίπτωση δεν μπορεί κανεις να βγάλει συμπεράσματα.&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2889.aspx</link><pubDate>Fri, 17 Jun 2005 21:32:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2889</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2889.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2889</wfw:commentRss><description>Και για το sorting. Δες αυτό το &lt;a target="_blank" title="http://www.sommarskog.se/dynamic_sql.html#Order_by" href="http://www.sommarskog.se/dynamic_sql.html#Order_by"&gt;άρθρο &lt;/a&gt;του &lt;a target="_blank" title="http://www.sommarskog.se/index.html" href="http://www.sommarskog.se/index.html"&gt;Erland Sommarskog&lt;/a&gt; πως να το κάνεις χωρίς dynamic sql. Έχει και άλλα ενδιαφέροντα άρθρα όπως &lt;i&gt;&lt;a target="_blank" title="http://www.sommarskog.se/dyn-search.html" href="http://www.sommarskog.se/dyn-search.html"&gt;Dynamic Search Conditions&lt;/a&gt; &lt;/i&gt;και &lt;a target="_blank" title="http://www.sommarskog.se/arrays-in-sql.html" href="http://www.sommarskog.se/arrays-in-sql.html"&gt;Arrays and Lists in SQL Server,&lt;/a&gt; ή πως να περάσεις λίστα από IDs χωρίς dynamic sql και ιστορίες&lt;br /&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2888.aspx</link><pubDate>Fri, 17 Jun 2005 21:28:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2888</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2888.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2888</wfw:commentRss><description>Μή βιάζεσαι! Το δοκίμασες? Μόνο αν δοκιμάσεις και τις δύο μεθόδους μπορείς να βγάλεις συμπέρασμα. Εξάλλου και η πρώτη λύση με τα αλλεπάλληλα top το ίδιο κάνει, απλά δεν το βλέπεις. Στην πραγματικότητα όμως, ο SQL χρησιμοποιεί τα indexes από πίσω για να κάνει τη δουλειά χωρίς να χρειαστεί να διαβάσει τα πάντα. &lt;br /&gt; &lt;br /&gt; Αν δεν δοκιμάσεις, δεν βγάζεις άκρη. Ανάλογα με τα indexes και τα στατιστικά των πινάκων το ένα ή το άλλο να βγουν πιο γρήγορα&lt;br /&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2886.aspx</link><pubDate>Fri, 17 Jun 2005 20:50:56 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2886</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2886.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2886</wfw:commentRss><description>&lt;p&gt;&lt;font style="BACKGROUND-COLOR: #efefef"&gt;Σχολιάζω, όχι τόσο για μένα και για σένα, όσο πιθανώς για τρίτους αναγνώστες:&lt;br /&gt;&lt;br /&gt;Για την πρώτη μέθοδο που ανέφερες:&lt;br /&gt;Εξυπνο! Υποκαθιστά το row number το οποίο δεν υφίσταται (ακόμα), με ένα identity field στον προσωρινό πίνακα ωστε να έχει την κατάταξη που του χρειάζεται για να επιλέξει τα records. Βεβαια, για πολύ μεγάλα result sets είναι overkill μια και χρειάζεται να κάνει πάντα insert into το πλήρες result set.&lt;br /&gt;&lt;br /&gt;Μια εναλλακτική που μου πέρασε από το μυαλό είναι (οταν και αν γίνεται) ο προσωρινός πίνακας να μην έχει το πλήρες result set, αλλά μόνο τα primary keys (αν υφίστανται) του result set στο οποίο θέλεις εσύ να κάνεις paging. Μετά, αφού βρεις τι θέλεις, κάνεις join το result set που προκύπτει από τον προσωρινό πίνακα με το result set στο οποίο θέλεις να κάνεις paging. Από πλευράς performance, σε μεγάλα result sets, υποψιάζομαι οτι ίσως αυτό έχει κάποια βελτίωση.&lt;br /&gt;&lt;br /&gt;Για την δεύτερη μέθοδο που ανέφερες:&lt;br /&gt;Πρωτότυπο! Το rowcount ήταν μια τεχνική που δεν την είχα υπόψη μου. Το κακό είναι οτι και εδώ το performance γίνεται χειρότερο όταν βρίσκεσαι στις τελευταίες σελίδες (μια και διαλέγεις όλα τα records ΜΕΧΡΙ την τελευταία σελίδα για να πάρεις το offset και να συνεχίσεις με τα επόμενα n records οπου n=page size), συν το οτι για να αποφύγεις την dynamic sql δεν έχεις έλεγχο επάνω στο sorting, αλλά το ορίζεις στατικά. Ειναι πολύ πολύ χρήσιμο σε κάποιες περιπτώσεις παρ'όλα αυτά.&lt;br /&gt;&lt;br /&gt;Παντως δεν μπορείς να πεις, αυτή τη φορά σου έδωσα στο πιάτο τον "εχθρό" (dynamic sql) και τον κατατρόπωσες &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2882.aspx</link><pubDate>Fri, 17 Jun 2005 19:11:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2882</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2882.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2882</wfw:commentRss><description>Και όμως, υπάρχει τρόπος να κάνεις paging χωρίς dynamic sql και είναι και γρηγορότερος! Η λύση υπάρχει στο άρθρο &lt;a target="_blank" title="http://www.aspfaq.com/show.asp?id=2120#results" href="http://www.aspfaq.com/show.asp?id=2120#results"&gt;"How do I page a recordset?"&lt;/a&gt; του Aaron Bertrand. Χρησιμοποιεί το RowCount και έχει την παρακάτω μορφή:&lt;br /&gt; &lt;br /&gt; &lt;font face="Courier New" size="2"&gt;CREATE PROCEDURE SampleCDs_Paging_Rowcount&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; @pagenum INT = 1,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; @perpage INT = 50&amp;nbsp;&lt;br /&gt; AS&amp;nbsp;&lt;br /&gt; BEGIN&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET NOCOUNT ON&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; DECLARE&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ubound INT,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @lbound INT,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @pages INT,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @rows INT&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SELECT&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @rows = COUNT(*),&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @pages = COUNT(*) / @perpage&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; FROM&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SampleCDs WITH (NOLOCK)&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; IF @rows % @perpage != 0 SET @pages = @pages + 1&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; IF @pagenum &amp;lt; 1 SET @pagenum = 1&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; IF @pagenum &amp;gt; @pages SET @pagenum = @pages&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET @ubound = @perpage * @pagenum &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET @lbound = @ubound - (@perpage - 1) &amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SELECT&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CurrentPage = @pagenum,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TotalPages = @pages,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TotalRows = @rows&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; -- this method determines the string values&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; -- for the first desired row, then sets the&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; -- rowcount to get it, plus the next n rows&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; DECLARE @aname VARCHAR(64), @title VARCHAR(64)&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET ROWCOUNT @lbound&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SELECT&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @aname = ArtistName,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @title = Title&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; FROM&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SampleCDs WITH (NOLOCK)&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; ORDER BY&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArtistName,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Title&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET ROWCOUNT @perPage&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SELECT&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArtistName,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Title&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; FROM&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SampleCDs WITH (NOLOCK)&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; WHERE&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArtistName + '~' + Title&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;gt;= @aname + '~' + @title&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; ORDER BY&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ArtistName,&amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Title&amp;nbsp;&lt;br /&gt; &amp;nbsp;&lt;br /&gt; &amp;nbsp; &amp;nbsp; SET ROWCOUNT 0&amp;nbsp;&lt;br /&gt; END&amp;nbsp;&lt;br /&gt; GO&lt;/font&gt;&lt;br /&gt;</description></item><item><title>Re: Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2876.aspx</link><pubDate>Fri, 17 Jun 2005 01:18:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2876</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2876.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2876</wfw:commentRss><description>Η ιδέα είναι αντιγραμμένη από το βιβλίο των Gan, Moreau, "Advanced Transact-SQL for SQL Server 2000", σελ. 655, Getting Rows m to n. Μόνο που εκεί δεν φτιάχνει ένα string αλλά έχει ένα SQL statement με το m, n σαν αριθμούς. Προφανώς, κάποιος πήρε τη λύση και την έκανε dynamic sql για να μπορέσει να βάλει παραμέτρους. &lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; Η επίδοση της λύσης δεν επηρρεάζεται από τον αριθμό της σελίδας, κάτι που θα δεις και αν την δοκιμάσεις στον query analyzer. &lt;br /&gt; &lt;br /&gt; Η άλλη λύση που προτείνεται στο βιβλίο χρησιμοποιεί temporary tables και είναι πιο αργή αλλά δεν χρειάζεται dynamic sql. Με αυτή θα είχες μια λύση του στυλ:&lt;br /&gt; &lt;br /&gt; &lt;font face="Courier New" size="2"&gt;ALTER PROCEDURE UserPaging2&lt;br /&gt; (&lt;br /&gt; &amp;nbsp; @currentPage int = 1, @pageSize int =10&lt;br /&gt; )&lt;br /&gt; AS&lt;br /&gt; &lt;br /&gt; select identity (int,1,1) as rownum , *&lt;br /&gt; into #tmpCustomers&lt;br /&gt; from customers&lt;br /&gt; order by contactname asc&lt;br /&gt; &lt;br /&gt; --alter table #tmpCustomers add constraint PK_tmpCustomers PRIMARY KEY (rownum)&lt;br /&gt; select * from #tmpCustomers where rownum between (@currentPage-1)*@pageSize and @currentPage*@pageSize&lt;br /&gt; &lt;br /&gt; return&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; Για μια καλύτερη λύση θα πρέπει να ψάξω σε κάποιο αρχαίο κώδικα που χρησιμοποιούσε paging. &lt;br /&gt;</description></item><item><title>Custom Paging με Stored Procedures</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/2875.aspx</link><pubDate>Fri, 17 Jun 2005 00:35:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:2875</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/2875.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=2875</wfw:commentRss><description>Διάβαζα &lt;a target="_blank" title="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/ameripaypaging.asp" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/ameripaypaging.asp"&gt;σε αυτή τη σελίδα των Patterns &amp;amp; Practices &lt;/a&gt;μια πρακτική που προτείνει η Microsoft για custom SP paging. Αυτό βοηθάει γενικά όταν έχεις ένα μεγάαααααλο result set και δεν θέλεις να το γυρίσεις όλο μαζί στον client (ειδικά σε asp.net), παρά μόνο τα δεδομένα που πραγματικά θέλεις.&lt;br /&gt;&lt;br /&gt;Η Microsoft προτείνει κάτι τέτοιο:&lt;br /&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;CREATE PROCEDURE UserPaging&lt;br /&gt;(&lt;br /&gt;&amp;nbsp; @currentPage int = 1, @pageSize int =10&lt;br /&gt;)&lt;br /&gt;AS&lt;br /&gt;&amp;nbsp; DECLARE @Out int, @rowsToRetrieve int, @SQLSTRING nvarchar(1000)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; SET @rowsToRetrieve = (@pageSize * @currentPage)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; SET NOCOUNT ON&lt;br /&gt;&amp;nbsp; SET @SQLSTRING = N'select CustomerID,CompanyName,ContactName,ContactTitle from ( SELECT TOP '+ CAST(@pageSize as varchar(10)) + 'CustomerId,CompanyName,ContactName,ContactTitle from (SELECT TOP ' + CAST(@rowsToRetrieve as varchar(10)) + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'CustomerID,CompanyName,ContactName,ContactTitle &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;FROM (SELECT TOP ' + CAST(@rowsToRetrieve as varchar(10)) + &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'CustomerID,CompanyName,ContactName,ContactTitle FROM Customers as T1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ORDER BY contactname) AS T2 ORDER BY contactname DESC ) AS T3) As T4 ORDER BY contactname ASC'&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; EXEC(@SQLSTRING)&lt;br /&gt;&amp;nbsp; RETURN&lt;br /&gt;&amp;nbsp; GO&lt;br /&gt;&lt;br /&gt;Εγω όμως, από την άλλη μεριά, λεω οτι αυτό δεν κάνει ΑΚΡΙΒΩΣ τη δουλειά αυτή.&amp;nbsp;Επιστρέφει μεν τα data τα οποία χρειάζεσαι, αλλά υποψιάζομαι οτι το performance υποφέρει στις τελευταίες σελίδες.&lt;br /&gt;&lt;br /&gt;Εχει κανείς κάτι άλλο υπόψη του για sp paging? Η, κατά πόσο έχει δει κανείς οτι αυτό που προτείνει η Microsoft "παιζει";&lt;br /&gt;&lt;br /&gt;(Καναβε! Dynamic SQL που την συμπαθείς τοοοοοσο πολύ! Ριχτα! &lt;img src="/forums/emoticons/emotion-1.gif" alt="Smile" /&gt; )&lt;br /&gt;&lt;/font&gt;</description></item></channel></rss>