Starší komentáře ke článku: Univerzální stránkovací procedura v MS SQL

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Tomáš Tintěra

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.

Avatar

Autor komentáře: Luděk Roleček

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.

Avatar

Autor komentáře: kuzma

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

Avatar

Autor komentáře: Jerry

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. ;-)

Avatar

Autor komentáře: magneto

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.

Avatar

Autor komentáře: Robert Vejvoda

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.

Avatar

Autor komentáře: kuzma

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

Avatar

Autor komentáře: Ondrej Valenta

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 ???

Avatar

Autor komentáře: Jméno a příjmení

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ě.

Avatar

Autor komentáře: Jerry

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...;-)

Avatar

Autor komentáře: Jerry

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...:-/

Avatar

Autor komentáře: RJ

Datum vložení: 10.9.2006 13:58:21

Novy SQL server to vazne umi, MS splnil slovo :-)

Avatar

Autor komentáře: Honza

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 ?

Avatar

Autor komentáře: Jerry

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ů.

Avatar

Autor komentáře: Honza

Datum vložení: 19.1.2005 10:16:15

Dekuji za radu.
Pomohlo to a uz to funguje.
Honza

Avatar

Autor komentáře: Rudolf Dvořáček

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.

Avatar

Autor komentáře: Rudolf Dvořáček

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.

Avatar

Autor komentáře: Ondra

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

Avatar

Autor komentáře: Trupik

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.

Avatar

Autor komentáře: Petr

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.

Avatar

Autor komentáře: yarex

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 ;))))

Avatar

Autor komentáře: lubean

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...

Avatar

Autor komentáře: Zdenek

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

Avatar

Autor komentáře: Gabriel

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!

Avatar

Autor komentáře: Techi

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>

Zpět na článek | Úvodní stránka Interval.cz