25. april 2001 - 10:27Der er
12 kommentarer og 1 løsning
MS SQL - stored procedure - returner recordset sorteret ud fra
findes der mon én, der kan klare den her med hånden på ryggen.
Tabel placeret på MS SQL 7.0 Navn: Table1 Felt: xkoordinat (integer) 4byte Felt: ykoordinat (integer) 4byte Felt: ID (key) Felt: osv...
x- og ykoordinat er som vi kender det fra 8.klasses matematik, placeringen i et koordinatsæt.
Jeg skal liste alle records (via en stored procedure) som ligger indenfor et afgrænset område i koordinatsættet, og de skal sorteres ud fra afstanden til centrum af det givne område...
Jeg vil meget gerne have hjælp til følgende: 1. En stored procedure som modtager et område i koordinatsættet, dvs. 2 diagonal-hjørners xy koordinater, modtager (eller beregner) centrum af koordinatsættet, samt returnerer et recordsæt, sorteret ud fra afstanden til centrum
Afstanden til centrum er jo selvfølgelig dynamisk, afhængigt af input-var.
Efterfølgende - for at modtage pointene, skal du lige vise mig, hvordan man så i ASP henter den information som sp laver, altså loader det i et adodb.recordset
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
SELECT x, y, SQRT(POWER(x-@cx,2) + POWER(y-@cy,2)) AS Dist FROM TEST WHERE (x BETWEEN @x1 AND @x2 OR x BETWEEN @x2 AND @x1) AND (y BETWEEN @y1 AND @y2 OR y BETWEEN @y2 AND @y1) ORDER BY Dist
Jeg ønsker det som en sp idet jeg forventer en compiled sp kan eksekvere talbehandlingen hurtigere end u-kompileret ASP. Desuden forventer jeg at det er hurtigere at returnere sættet i den rigtige orden vil foregå hurtigere i sp end at skulle sortere (og evt. beregne afstand til centrum data) i ASP efterfølgende.
Denne laver kun beregningen af centrum i ASP, afstandsberegning og sortering foregår i SQL. Jeg kan ikke forestille mig at det skulle være tungt.
Jeg har ikke stor erfaring med at returnere værdier, har hørt at det ikke er måden at gøre det på.
x1 = 3 y1 = 20 x2 = 20 y2 = 2
cx = (x1 + x2)/2 cy = (y1 + y2)/2
SqlStr = \"SELECT x, y, SQRT(POWER(x-\"&cx&\",2) + POWER(y-\"&cy&\",2)) AS Dist FROM TEST WHERE (x BETWEEN \"&x1&\" AND \"&x2&\" OR x BETWEEN \"&x2&\" AND \"&x1&\") AND (y BETWEEN \"&y1&\" AND \"&y2&\" OR y BETWEEN \"&y2&\" AND \"&y1&\") ORDER BY Dist\" Set Rec = Con.Execute(SqlStr)
Ikke testet i asp, så der er forbehold for småfejl. Den er testet i SQL
En \"anden\" grund til at jeg gerne vil have det som sp er, at jeg skal lære af det. Og det er lige præcist sp kontra asp som jeg ikke kan (faktisk er det sp som jeg ikke kan). SQL som sprog kan jeg selv klare, men det var via Access\'en og div. db-teori-fag at jeg lærte det. Derfor de mange point, for at få noget, som jeg selv kan implementere og se virker på min SQL7 kontra mine ASP-sider.
Derfor vil jeg gerne have det som sp. Iøvrigt mener jeg i længden at det bliver uoverskueligt at have alt min SQL liggende på diverse asp-sider (pt. er systemet på ikke under 125 asp-sider i alle afskygninger af includes osv). Nemmere behandling i forhold til ændringer i DB\'en bliver det, hvis alt SQL ligger i sp, som jeg kan gennemsøge ved ændrede forhold i DB\'en.Så hvis du vil vise mig hvordan jeg får ovenstående over i en sp og kaldt fra ASP er pointene dine... :-)
SELECT x, y, SQRT(POWER(x-@cx,2) + POWER(y-@cy,2)) AS Dist FROM TEST WHERE (x BETWEEN @x1 AND @x2 OR x BETWEEN @x2 AND @x1) AND (y BETWEEN @y1 AND @y2 OR y BETWEEN @y2 AND @y1) ORDER BY Dist
Og du kalder den med:
Set Rec = Con.Execute(\"EXEC Afstand 3, 20, 20, 2\")
Jeg vil gerne lige prøve at rode videre med den selv - tusind tak for hjælpen. Det øjeblik jeg får dit til at virke (indenfor et par dage, forhåbentligt) får du dine point..... ok?
Sådan her, så returnerer den ikke afstanden, men kun x og y:
SELECT x, y FROM TEST WHERE (x BETWEEN @x1 AND @x2 OR x BETWEEN @x2 AND @x1) AND (y BETWEEN @y1 AND @y2 OR y BETWEEN @y2 AND @y1) ORDER BY SQRT(POWER(x-@cx,2) + POWER(y-@cy,2))
Hallo?? Hvordan går det? Jeg er lidt spændt på, og det er OK at returnere et recordset fra en sp, men har ikke selv fundt noget om det i ADO-dokumentationen.
Det virker helt fint - beklager at jeg ikke har fået svaret før. Har lavet sp, som returnerer til adodb.recordset. Nu mangler jeg blot at få lavet nogle test, der viser hastigheden på sp i forhold til ren asp.
Glad for at kunne hjælpe, og det var jo en rigtig god pris
/Lars
Synes godt om
Ny brugerNybegynder
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.