Starší komentáře ke článku: Univerzální stránkovací procedura v MS SQL
Zpět na článek | Úvodní stránka Interval.cz
Datum vložení: 4.1.2005 15:26:20
Díky za pěkný a odborně fundovaný článek. Tato tecnika by mohgla být i velmi rychlá, hlavně při správném indexování?
Máte nebo chystáte nějaké testy rychlosti nebo porovnání s jinými technikami na MS SQL nebo My SQL?
Pozor pro zveřejňování výkonostních testů MS SQL serveru je IMHO nutno mít souhlas výrobce.
Datum vložení: 4.1.2005 19:25:20
Jen bych upozornil na docela podstatnou chybičku hned ve druhém odstavci - výraz TOP není schopen poskytnout záznamy "od" (jak je to v článku), ale právě naopak - "do". Tedy TOP 15 vrátí prvních patnáct záznamů, ne všechny od patnáctého dále.
Datum vložení: 4.1.2005 21:01:43
TOP 15 by měl vrátit posledních 15 záznamů, nikoli prvních patnáct
Datum vložení: 4.1.2005 22:29:51
Pan Roleček se nemýlí, keyword TOP omezuje maximální počet vrácených záznamů, čili vrátí PRVNÍCH n záznamů, ne posledních. Pokud pochybujete, není nic jednoduššího než si to zkusit. ;-)
Datum vložení: 5.1.2005 11:52:39
Jeste k tomu tom TOP, dost zalezi na bloku ORDER BY jak se bude TOP chovat. Pokud existuji duplicity, tak pri pouziti TOP 10 muzete klidne dostat 11 nebo vice radku.
Tak jak je TOP pouzit v clanku jeho chovani vubec nevadi.
Datum vložení: 5.1.2005 13:06:05
To je pekny nesmysl, kdyz je top 10, tak je vysledek 10 radku at uz jsou duplicitni nebo ne.
Datum vložení: 6.1.2005 7:20:59
tady jde asi o záměnu s modifikátorem WITH TIES, pokud bude zadáno
SELECT TOP 10 WITH TIES ... ORDER BY datum
tak výsledkem může být skutečně třeba celá tabulka
Datum vložení: 12.1.2005 12:29:18
neudelal tak trivialni funkci jakou je LIMIT a necha programatory aby se trapili takovyma slozityma uloznyma procedurama, muze me to nekdo vysvetlit ???
Datum vložení: 16.1.2005 5:19:00
Protože to (skoro) nikdo nepotřebuje. Pro stránkování MS SQL disponuje stránkovacími procedury a serverovými kurozory, které stránkování řeší objektovým modelem ADODB.Recordset. A serverové ovládací prvky jako datagrid mají podporu pro stránkování zahrnutou v sobě.
Datum vložení: 17.1.2005 13:20:58
No paráda. Má to menší chybku, .NETové objekty už kurzory (celkem správně) nepoužívají. Logicky, použití kurzorů je velmi neefektivní co se týče zdrojů (paměť, přenosové kapacity...); navíc je to v podstatě relikt (byť někdy šikovný) z ISAM databází. V desktopových aplikacích to snad opravdu nikdo nepotřebuje, ale na webu (na kterém se přece MS také snaží prosadit) taková funkčnost sakra chybí. A pak jsou řešením buď takovéhle opičárny, nebo tahat kvůli pár záznamům z konce tabulky i všechny ostatní záznamy. Co to udělá s výkonem asi nemusím říkat.
Mimochodem, další verze MSSQL to už umět má. Což mi bylo řečeno pracovníky MS v jedné diskusi na Emwacu někdy před třemi roky...;-)
Datum vložení: 17.1.2005 13:23:34
Hmm, jak tak koukám, chtělo by to méně závorek a více čárek nebo pomlček...:-/
Datum vložení: 10.9.2006 13:58:21
Novy SQL server to vazne umi, MS splnil slovo :-)
Datum vložení: 18.1.2005 15:59:56
Jak tu proceduru muzu pouyzit v ASP ?
Kdyz skusim tohle:
set data=spojeni.Execute("dbo.PaginateTable tabulka,50,0, index), tak se mi vrati jen pocet zaznamu, stranka\, atd.
Ale jaz e potrebuji dostat i k datum. Muzete mi nekdo poradit ?
Datum vložení: 19.1.2005 9:54:35
Se starým ADODB už pár let nedělám, ale pokud se nepletu, měl objekt RecordSet funkci NextRecordset, která umožnila načítat data z další sady záznamů.
Datum vložení: 19.1.2005 10:16:15
Dekuji za radu.
Pomohlo to a uz to funguje.
Honza
Datum vložení: 5.10.2005 9:40:26
[i]Namísto SET ROWCOUNT bychom mohli bychom použít i výraz TOP - výsledek bude stejný, jen zpracování bude asi pomalejší, při použití SET ROWCOUNT se totiž už vnitřní dotaz ukončí po vrácení 15 záznamů a tak vnější dotaz, který obrací pořadí pro potřebu zobrazení, pracuje jen s 15 záznamy:[/i] Pokud použiji ve vnitřním dotazu SELECT TOP 100 PERCENT, pak tento dotaz vrací celý výsledek vnějšímu dotazu bez ohledu na to, na kolik je nastaven ROWCOUNT.
Datum vložení: 20.3.2006 13:55:32
při použití informací z tohoto článku jsem narazil na několik úskalí: - při použití procedury sp_executesql je třeba nastavit právo pro čtení z dané tabulky pro účet, pod kterým je volána aktuální procedura, což může být bezpečnostní riziko. Z toho důvodu jsem přestoupil k tomu, že vytvořím temporary table, do které uložím výsledek dotazu na počet záznamů (a to pouze v případě, že stránkování požaduji) - SET ROWCOUNT X nelze použít u dotazů, které jsoi JOINované. Dojde totiž k tomu, že JOIN se provede na prvních X záznamů z JOINOVANÉ tabulky nebo dotazu a tím se změní výslede. Je třeba použít SELECT TOP X.
Datum vložení: 29.8.2006 17:14:19
Dobrý den, chtěl bych se zeptat jak by tato funkce vypadala v MSAccess Visual Basic? A je velký rozdíl mezi tímto stránkováním a stránkováním v recordsetu (rs.AbsolutePage) při více jak 5000 záznamech v tabulce? Jde vůbec v MSAccess udělat efektivní a rychlé stránkování s nástroji ADO, ASP? Hádám správně, že je to potřeba udělat tak abych při stránkování nepracoval s celou tabulkou ale jenom s částí, např. jak je to v tomto příkladu? Děkuji Ondra
Datum vložení: 28.1.2007 14:43:27
Snadné stránkování v ASP.NET z MS SQL pomocí Repeateru: http://trupik.aspweb.cz/programovani/csharp-aspnet/strankovani-v-asp-net-a-ms-sql-serveru-univerzalne.aspx Číslo stránky se bere přímo z URL, komponentu stačí inicializovat jen SQL dotazem SELECT, zbytek už si komponenta zařídí sama.
Datum vložení: 31.7.2007 15:43:07
Je to již starý článek, ale i přesto bych rád podotknout pro ty co zde zavítají. Pokud budu třídit podle sloupce jehož hodnota se bude v množině vyskytovat vícekrát (NULL, '' prostě bude stejná) tak stránkování nechodí. Třídění je pak nejednoznačné a musím do klauzule order by přidat další nejlépe ID, či ROWID.
Datum vložení: 23.8.2007 15:03:47
Da sa strankovat aj optimalne bez toho aby sa prenasali vsetky data do repeatera alebo inych blbovin najprv a to priamo na serveri, ale je to troska potrebuje fintu. kto si zagoogluje ten si to naaajde ;))))
Datum vložení: 23.8.2007 23:15:00
Možná by sis mohl ten článek přečíst, aby ses tu neztrapňoval úžasným objevem... v článku se nepíše vůbec nic o tom, že se do repeateru tahají všechny data a blboviny...
Datum vložení: 16.1.2008 15:48:07
Dobrý den, poradil by mě prosím někdo jak vytvořit programově spojení z Visual Basiceu 2005 do MS SQL Serveru 2005, kde je vytvořená databáze s daty. Prípadně, kde by byl na to nějaký technický odkaz či literatura ? Děkuji za odbornou pomoc. Zdeněk, kontaktni email: zdu@seznam.cz
Datum vložení: 17.1.2008 15:08:22
Kterej matlal tohle psal? Vyzívám autora članku, aby v něm opravil chyby a zbytečné nemátl čtenáře! Autor skutečně neví jak zacházet s TOP!
Datum vložení: 17.8.2008 1:44:49
<flame> Já sice nevím jak se tohle v MS SQL řeší, ale je mi to jedno. Použiju třídu Zend_Db_Select a u dotazu nastavím limit(od do) a dotaz se upraví závisle na databázi (MySQL/Oracle/MSSQL) a já můžu žít dál v blahé nevědomosti :) </flame>