At loope igennem et recordset - underlig fejl.
Hej,Jeg har i mange timer nu siddet og roddet med et meget underligt problem synes jeg.
Får at i kan se hvad der er i de forskellige databaser, har jeg taget screenshots når jeg kører queryen i query analyzer.
Når jeg kører:
SELECT chance, itemid FROM m_itemdrops WHERE rid = @rid ORDER BY chance asc
får jeg:
www.secretsofwar.net/hotcut/sql1.jpg
Jeg vil også komme med screenshots af de egentlige problemer, længere nede.
Jeg har denne kode i en Stored Procedure:
------------------------------------
DECLARE @RN DECIMAL(5,2)
SET @RN = Rand()*100
DECLARE @drop_chance DECIMAL(5,2)
DECLARE items CURSOR LOCAL FOR
SELECT chance, itemid FROM m_itemdrops WHERE rid= @ridORDER BY chance asc
OPEN items
SET @drop_chance = 0
DECLARE @i int
SET @i = 0
DECLARE @chance DECIMAL(5,2)
DECLARE @itemid int
WHILE (@@FETCH_STATUS = 0 AND @drop_chance < @RN)
BEGIN
FETCH NEXT FROM items INTO @chance, @itemid
SET @i = @i+1
SET @drop_chance = @drop_chance + @chance
END
CLOSE items
DEALLOCATE items
SELECT
itemid = @itemid,
i=@i,
RN=@RN,
chance=@chance,
drop_chance=@drop_chance,
FETCH_STATUS=@@FETCH_STATUS
-----------------------------------------------
Det koden skal gøre, er at vælge en tilfældig linie i tabellen "m_itemdrops", og lave noge ændringer ved denne.
Den tilfældige linie skal udvælges efter nogle procenter; her er der 4 linier med hver 25%'s chance, men det kunne lige så godt være 2 med 10%'s chance, samt én med 80 etc...
Så vidt jeg kan se på den kode ovenover, burde dette virke.
Mit problem er dog, at så snart @RN er over 50 sker dette:
www.secretsofwar.net/hotcut/sql2.jpg
hvilket giver et problem... den burde i dette tilfælde med RN omkring 52 jo give itemid til at være 6.
Hvis RN er under 50, kommer:
www.secretsofwar.net/hotcut/sql3.jpg
hvilket er hvad der er korrekt.
Er der nogen som kan forklare dette fænomen, og hjælpe mig med at finde en løsning??? Jeg fatter ikke hvorfor det ikke virker som det skal. Der kommer ikke nogen fejlmeddelelser eller lignende - kun at de forskellige variabler bliver NULL
Hvis i mangler yderligere information, så sig endelig til.
