Avatar billede jimpp Nybegynder
23. august 2006 - 16:10 Der er 10 kommentarer og
1 løsning

Limit i t-sql

Hej, jeg sidder og har brug noget MySQL funktionalitet i MSSQL :)

Sidder med en SQL 2005 server og tænker, kan det være rigtigt at MSSQL ikke har et alternativ til MySQL syntaksen

SELECT * FROM funny LIMIT 5,7

Resultat:
RS5
RS6
RS7

Kan tilsyneladdende ikke benytte LIMIT i MS SQL, hvad kan jeg gøre i stedet for?

Help :)
Avatar billede lorentsnv Nybegynder
23. august 2006 - 16:14 #1
Det er rigtig at LIMI ikke eksistre på SQL Server. På SQL Server 2000 kan du måske bruge:

Select top 7 *
From MinTable
Where ID not in (Select top 5 ID from MinTabel)
Avatar billede lorentsnv Nybegynder
23. august 2006 - 16:15 #2
På SQL Server 2005 mener jeg det findes en mulighed for at få rownum med. Hunsker ikke helt funktionen, men i så fald ville det nok være mulighed for at lave en where på denne.
Avatar billede arne_v Ekspert
23. august 2006 - 16:18 #3
SELECT TOP 5 * FROM funny ORDER BY noget

henter de oeverste 5

men at hente 5-7 (som vist ioevrigt er LIMIT 5,3 i MySQL !!) kraever at du
SELECT'er fra en SELECT i MS SQL
Avatar billede fennec Nybegynder
23. august 2006 - 16:23 #4
LIMIT blev lavet i MySQL fordi den ikke understøtted den "advanceret" corsor/pointer type, som er i de andre database. LIMIT er derfor noget man normalt kan klarer gennem sit programmeringssprog i stedet for SQL.

Det er f.eks det der bruges i "paging" funktioner (se f.eks ASP kategorien)

Workaroundet er som lorentsnv (og arne_v) er inde på.
Avatar billede lorentsnv Nybegynder
23. august 2006 - 16:23 #5
Med følgende SQL fik jeg kundenr 5,6 og 7 fra en kundetabel:
select top 3 * from Kunder where KundeID not in (Select top 5 KundeID from Kunder)
Avatar billede lorentsnv Nybegynder
23. august 2006 - 16:25 #6
Forskellen fra min første select er at jeg i sidste SQL har select top 3 i stedet for select top 7.
Avatar billede jimpp Nybegynder
23. august 2006 - 16:26 #7
Havde håbet at kunne lave det lidt mere simpelt :)

Men mange tak for hjælpen, det må være efter først til mølle - svar endeligt
Avatar billede lorentsnv Nybegynder
23. august 2006 - 16:37 #8
svar :)
Avatar billede dr_chaos Nybegynder
23. august 2006 - 16:46 #9
lorentsnv husk nu at vælge svar :)
Avatar billede arne_v Ekspert
23. august 2006 - 16:51 #10
Cursors sucks. Og er efter min mening et levn fra embedded SQL i Cobol.

Der er et andet problem med LIMIT.

SELECT * FROM t ORDER BY f LIMIT 0,10
SELECT * FROM t ORDER BY f LIMIT 10,10
SELECT * FROM t ORDER BY f LIMIT 20,10

er ikke paa nogen maade garanteret at returnere de foerste 30 raekker paa
et tidspunkt. Hvis der indsaettes eller slettes raekker imellem
saa kan man faa nogle spoejse resultater.
Avatar billede lorentsnv Nybegynder
23. august 2006 - 17:18 #11
svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester