25. juni 2003 - 10:54Der er
17 kommentarer og 1 løsning
Count i sp
Jeg er temmelig ny indenfor sp, men jeg har lavet følgende kode som skal lave nogle summer for to opslag. Hvis jeg kører sp i SQL Query Analyser, så fungerer det som det skal jeg får retuneret antalord. Men så snart jeg afvikler det fra min asp-side får jeg følgende fejl: Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
Min sp-kode er: CREATE PROCEDURE dbo.sp_TaelLemmaIaltDk
@par_lemmaDK varchar(125)
AS
declare @antal int, @x int
set @antal = 0
declare cursor_Uden cursor
for (select count(distinct lemmauk) as antal from tbllemma where lemmadk = @par_lemmaDk and polysemiuk = 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Uden FETCH NEXT FROM cursor_Uden INTO @x
while @@FETCH_STATUS=0 begin FETCH NEXT FROM cursor_Uden INTO @x set @antal = @antal + @x end
declare cursor_Med cursor for (Select count(distinct lemmauk) from tbllemma where lemmadk = @par_lemmaDk and polysemiuk <> 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Med FETCH NEXT FROM cursor_Med INTO @x
while @@FETCH_STATUS=0 begin FETCH NEXT FROM cursor_Med INTO @x set @antal = @antal + @x end
close cursor_Uden deallocate cursor_Uden close cursor_Med deallocate cursor_Med
for (select count(distinct lemmauk) as antal from tbllemma where lemmadk = @par_lemmaDk and polysemiuk = 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Uden FETCH NEXT FROM cursor_Uden INTO @x
while @@FETCH_STATUS=0 begin FETCH NEXT FROM cursor_Uden INTO @x set @antal = @antal + @x end
declare cursor_Med cursor for (Select count(distinct lemmauk) from tbllemma where lemmadk = @par_lemmaDk and polysemiuk <> 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Med FETCH NEXT FROM cursor_Med INTO @x
while @@FETCH_STATUS=0 begin FETCH NEXT FROM cursor_Med INTO @x set @antal = @antal + @x end
close cursor_Uden deallocate cursor_Uden close cursor_Med deallocate cursor_Med
for (select count(distinct lemmauk) as antal from tbllemma where lemmadk = @par_lemmaDk and polysemiuk = 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Uden FETCH NEXT FROM cursor_Uden INTO @x
while @@FETCH_STATUS=0 begin set @antal = @antal + @x
FETCH NEXT FROM cursor_Uden INTO @x end
declare cursor_Med cursor for (Select count(distinct lemmauk) from tbllemma where lemmadk = @par_lemmaDk and polysemiuk <> 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Med FETCH NEXT FROM cursor_Med INTO @x
while @@FETCH_STATUS=0 begin set @antal = @antal + @x
FETCH NEXT FROM cursor_Med INTO @x end
close cursor_Uden deallocate cursor_Uden close cursor_Med deallocate cursor_Med
Jeg har en tabel med en række ord, hvor felterne ordklasseuk, pluralisuk, emnuuk og geouk nogen gange er ens og andre gange er forskellig fra hinanden mellem to records. Det jeg ønsker er at tjekke hvor mange poster, der er hvor de fire felter er forskellige fra hinanden. Jeg laver opslaget to gange da polysemiuk både kan være <> 0 og =0. Det kan IKKE lade sig gøre at undlade where polysemi-sætningen da der er stor forskel for om polysemi er lig nul eller ej.
for (select count(distinct lemmauk) as antal from tbllemma where lemmadk = @par_lemmaDk and polysemiuk = 0 group by ordklasseuk, pluralisuk, emneuk, geouk)
open cursor_Uden FETCH NEXT FROM cursor_Uden INTO @x
while @@FETCH_STATUS=0 begin FETCH NEXT FROM cursor_Uden INTO @x set @antal = @antal + @x end
Du åbner cursoren og henter første post ind i @x via FETCH NEXT. Derefter looper du så længe, @@fetch_status = 0. Inde i løkken laver du en FETCH NEXT igen, og derefter bruger du værdien af @x. Men den værdi, der blev hentet til @x uden for løkken, er forsvundet. Desuden, når du kommer til bunden af tabellen, vil du lave en fetch next, som mislykkes, da der ikke er flere poster. Derefter har du en måske ugyldig værdi i @x
Jeg kan godt se logikken i det du siger. Men fjerne jeg nu den fetch som står oven for løkken, så kommer jeg aldrig ind i løkken. - Derfor skrev jeg denne. Jeg har i øvrigt nu byttet om i løkken, så den kører en fetch til sidst
SELECT SUM(a.antal) FROM tbllemma,(select count(distinct lemmauk) as antal FROM tbllemma where lemmadk = @par_lemmaDk and polysemiuk = 0 group by ordklasseuk, pluralisuk, emneuk, geouk) AS a
Jeg har lige fundet min fejl...... Som sagt er jeg ny i faget og jeg havde ikke sat min permissions rigtigt op. :-( Det er sku da også en underlig fejl at få bare pga. en permission
At du blander dig er jo netop det, som gør forummet genialt. Jeg ser på din løsning en anden dag. Tak for hjælpen begge to.
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.