Avatar billede -sofus- Nybegynder
17. januar 2006 - 13:40 Der er 16 kommentarer og
1 løsning

Random med newid

Jeg bruger Order by Newid() til at lave tilfældige udtræk.

Det har virket fint, indtil videre.

Idag får jeg så fejlen

[Microsoft][ODBC SQL Server Driver][SQL Server]
Cannot sort a row of size 8111, which is greater than the allowable maximum of 8094.

Og ved ikke helt hvad det betyder ?
Avatar billede -sofus- Nybegynder
17. januar 2006 - 13:43 #1
Det logiske bud, ville være at den ikke kunne sortere mere end 8094 rows, men der er kun 250
Avatar billede softspot Forsker
17. januar 2006 - 13:44 #2
Jeg tror snarere det er fordi du har en tabel med mange eller store felter, som tilsammen resulterer i en struktur der er større end de tilladte 8094 bytes...
Avatar billede -sofus- Nybegynder
17. januar 2006 - 13:50 #3
Okay, hvordan kan man ellers lave et random udtræk ?

eller er det muligt at sætte de 8094 bytes op til lidt mere ?
Avatar billede softspot Forsker
17. januar 2006 - 13:58 #4
Hmm... jeg er faktisk ikke klar over om pagesize kan ændres. Under alle omstændigheder afhænger det nok at hvilken version af MSSQL Server du kører.

Alternativt skulle du måske overveje om en normalisering af databasen var på sin plads, for det lyder lidt voldsomt at en tabel skulle fylde så meget. Der må være nogle naturlige relationer mellem data i den tabel, så den kan deles lidt op i nogle mindre tabeller...(?)
Avatar billede -sofus- Nybegynder
17. januar 2006 - 14:02 #5
I hver række, er der et text felt, og det er nok teksten der som fylder, og 8000 byte er ikke specielt meget, hvis der skal være plads til bare lidt tekst.
Avatar billede softspot Forsker
17. januar 2006 - 14:09 #6
Er det en varchar(8000) eller kunne du måske benytte typen text i stedet?
Avatar billede softspot Forsker
17. januar 2006 - 14:11 #7
Og i yderste konsekvens kan du godt lægge så store felter i en anden tabel og så bare lave en fremmednøgle tilbage til "hovedtabellen". Det er i det mindste en mulighed for at løse dette...
Avatar billede -sofus- Nybegynder
17. januar 2006 - 14:22 #8
Det er nvarchar, kunne være jeg skulle lave dem om til text felter istedet.

Plejer bare at bruge nvarchar, da min kode ikke virker med text felter.
Avatar billede softspot Forsker
17. januar 2006 - 14:26 #9
Ja, det går jo ikke :)

Kan du evt. begrænse dit udtræk til ikke at medtage tekstfeltet, så selve resultatet ikke bliver så stort (jeg er ikke klar over om det er resultatets størrelse eller tabellens størrelse der er afgørende for om denne fejl opstår).
Avatar billede softspot Forsker
17. januar 2006 - 14:29 #10
Alternativt skal du have fundet ud af hvordan man udtrækker data fra et textfelt (måske noget med getChunk i ADO - jeg har ikke selv prøvet dette, da jeg ikke synes det har været et problem før).
Avatar billede -sofus- Nybegynder
17. januar 2006 - 14:52 #11
Problemet er at jeg skal bruge det felt med tekst, i mit udtræk.

Er der andre felttyper end text, som kan indholde meget tekst?

Og hvorfor er det, at man kan hente alle andre former for felter, og ikke text ?
Avatar billede softspot Forsker
17. januar 2006 - 15:05 #12
Ja, det er et godt spørgsmål som givetvis bunder i en teknisk begrænsning/optimering. text-felter kan i sagens natur potentielt set transportere en masse(!) data. Det har måske derfor være nødvendigt, at lave en konstruktion omkring denne felttype, som kunne sikre, at man ikke skulle allokere en masse hukommelse (hvilket måske ikke ville være muligt i en given situation). Derfor kunne man forestille sig, at getChunk (eller hvad den nu hedder) er lavet for at man kan holde resurseforbruget indenfor nogle rimelig kontrollerede rammer, men stadig imødekomme behovet for store mængder tekstdata.

Jeg kan ikke give dig en præcis forklaring på, hvorfor det ikke er lavet mere transparent end som så og kan kun give dig noget sporadisk hjælp til hvad du skal søge efter. Det kan være der er andre her på E som konkret har arbejdet med store tekster og kan give dig en løsning... men altså ikke jeg.
Avatar billede cpufan Juniormester
17. januar 2006 - 22:53 #13
Avatar billede -sofus- Nybegynder
20. august 2007 - 09:48 #14
Er lige igang med en hovedoprydning.

Tak til alle som har deltaget, hvis nogen mener de fortjener point, så smid
et svar, ellers forsvinder de sammen med udlandsgælden (;
Avatar billede -sofus- Nybegynder
20. august 2007 - 09:48 #15
svar
Avatar billede softspot Forsker
20. august 2007 - 11:02 #16
Svar kommer her (om jeg har fortjent point er op til dig at vurdere :))...
Avatar billede softspot Forsker
20. august 2007 - 11:14 #17
Tak for point :)
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
Kurser inden for grundlæggende programmering

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