Limit v MsSQL

Zanima me kako bi iz MsSQL baze dobil limit. Naprimer zapise od 20 do 30.

V MySQL se je to nardilo takole: SELECT .... LIMIT 20, 10

Kaj pa tukej? 

Avtor: fora, objavljeno na portalu SloDug.si (Arhiv)

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

spirit1
spirit1 - četrtek, 11. januar 2007

na 2k5 ti tole vrne samo za dbo-jeve tabele.najbolj tocno je skor tole:ss2k:EXEC sp_MSforeachtable 'SELECT ''?'' as TableName, count(*) as RowCnt FROM ?' ss2k5: EXEC sys.sp_MSforeachtable 'SELECT ''?'' as TableName, count(*) as RowCnt FROM ?'

bojanv
bojanv - četrtek, 11. januar 2007

SELECT     [TableName] = so.name,     [RowCount] = MAX(si.rows) FROM  sysobjects so, sysindexes si WHERE so.xtype = 'U' AND si.id = OBJECT_ID(so.name) GROUP BY so.name ORDER BY  2 DESCČeprav to ni najbolj natančno, kolkr vem, ker se ne update-a redno.....

o-MA-n-tjaz
o-MA-n-tjaz - četrtek, 11. januar 2007

Še eno vprašanje. Kako bi napisati select stavek, ki bi vrnil imena vseh tabel v bazi in count za vsako tabelo? Lp,Matjaž  

ExAmigan
ExAmigan - četrtek, 11. januar 2007

V spodaj krepko označeni vrstici namesto zvezdice naštej stolpce, ki jih želiš dobiti vrnjene, pa bo.WITH OrderedCompany AS     (SELECT *, ROW_NUMBER() OVER (ORDER BY CompanyId) AS RowNumber         FROM Company)SELECT      *FROM        OrderedCompanyWHERE     RowNumber BETWEEN 20 AND 30

o-MA-n-tjaz
o-MA-n-tjaz - četrtek, 11. januar 2007

Mislil sem če se da spodnji select poptavit tako, da ne bo vračal ROW_NUMBER(). WITH OrderedCompany AS     (SELECT *, ROW_NUMBER() OVER (ORDER BY CompanyId) AS RowNumber         FROM Company)SELECT      *FROM        OrderedCompanyWHERE     RowNumber BETWEEN 20 AND 30  Lp,Matjaž 

bojanv
bojanv - četrtek, 11. januar 2007

select fieldname1, fieldname2,...,fieldnamen from tablename where desiredField between somevalue1 and somevalue2Al si kaj drugega mislil?

o-MA-n-tjaz
o-MA-n-tjaz - četrtek, 11. januar 2007

Se da ta select popraviti tako, da ne bo vračal ROW_NUMBER()? Matjaž 

bojanv
bojanv - torek, 02. januar 2007

LOL

spirit1
spirit1 - torek, 02. januar 2007

sej vem kaj je mislil... ampak morm ga mal... da ne zarjavi  

bojanv
bojanv - ponedeljek, 01. januar 2007

Primož, se strinjam s tvojo izjavo.....

PRiMoZ
PRiMoZ - ponedeljek, 01. januar 2007

spirit1:Bojan, v imenu vseh developerjev te lepo prosim da ne prenasas vec 10.000 vrstic po mrezi lepo prosim...   Saj bojan verjetno ni mislil prenašat teh 10.000 vrstič po mreži ampak nardit paging po teh vrsticah s pomočjo ROW_NUMBER()ja.

spirit1
spirit1 - petek, 29. december 2006

Bojan, v imenu vseh developerjev te lepo prosim da ne prenasas vec 10.000 vrstic po mrezi lepo prosim...  

AndrejT
AndrejT - sreda, 27. december 2006

Mislim, da je tole več zmagovalna kombinacija, sploh če jo primerjaš s prenosom in keširanjem vseh zapisov za paging. Joini in Viewi, če so prav spisani, ne bi smeli predstavljati kakšne večje izgube; za popolno ugodje (in za ceno nekaj malega prostora na strežniku) pa lahko oštevilčeno tabelo zapišeš kot indeksiran view...

bojanv
bojanv - sreda, 27. december 2006

Superca...mel sem v mislih par 10 tisoč zapisov....zanimalo me je, če mi bo delal probleme zarad custom paging-a, ker bi to uporabil v eni izmed svojih kontrol pa me je zanimalo, kok me bo to koštalo dodatnega časa izvajanja (če upoštevam še join-e in view-e).....

spirit1
spirit1 - sreda, 27. december 2006

definiraj ogromno zapisov cez milijon zapisov ga sigurno ne bos sel delat...ce rabis numbering v aplikaciji se to dela v front endu.drugace pa ni nek hudo performancni problem

bojanv
bojanv - sreda, 27. december 2006

kok je pa tale ROW_NUMBER() perfomančno problem? Recimo, če bi imel ogromno zapisov? Ga kdo uporablja v svojih aplikacijah pa je mel kaj problemov z njim? (počasnost, itd.)

AndrejT
AndrejT - petek, 22. december 2006

Če uporabljaš MSSQL2005, bi ekvivalent LIMITu lahko izgledal takole (da ne uporabljaš pogoja po polju, temveč po zaporedni številki zapisa):WITH OrderedCompany AS     (SELECT *, ROW_NUMBER() OVER (ORDER BY CompanyId) AS RowNumber         FROM Company)SELECT      *FROM        OrderedCompanyWHERE     RowNumber BETWEEN 20 AND 30

bojanv
bojanv - petek, 22. december 2006

Lahko uporabiš BETWEEN stavek, če želiš kakšen range zapisov ven dobit. Primer uporabe tukaj.