Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Problemas con un job que cree (https://www.clubdelphi.com/foros/showthread.php?t=64348)

Nomed 27-03-2009 19:01:24

Problemas con un job que cree
 
Buenas a todos bueno tengo un problema bastate simple pero que para mi es un mundo, he creado un job para el MSSQL server para mi servidor de MuOnline que hace los siguiente:

Cita:

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('100000000')
WHERE clevel >= 370 AND ctlcode < 8 AND Resets <= 9 AND Money >= 100000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('200000000')
WHERE clevel >= 380 AND ctlcode < 8 AND Resets >= 10 AND Resets <= 14 AND Money >= 200000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('300000000')
WHERE clevel >= 390 AND ctlcode < 8 AND Resets >= 15 AND Resets <= 19 AND Money >= 300000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('400000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 20 AND Resets <= 29 AND Money >= 400000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('500000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 30 AND Resets <= 39 AND Money >= 500000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('650000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 40 AND Money >= 650000000
Ahora os explico lo que intentaba hacer y que no me a salido como esperaba, yo quería que segun el valor de la colunma resets te exigiera un clevel y money superior, y que te sumara 1 al valor de resets pero no se porque se me suman 2 o a veces más alguien me sabria ayudar?

ContraVeneno 27-03-2009 19:20:47

supongamos que un registro tiene "Reset = 9"

Se ejecuta tu trabajo y el rango cae en la primer instrucción, con lo que al final de la instrucción tendrías "Reset = 10".

Luego se ejecuta la segunda instrucción y como ahora tienes "Reset = 10", también se ejecuta y ahora tienes el registro con "Reset = 11".

Lo mismo pasaría con los que tenga un valor igual al rango que estas revisando en cada reset.

Deberías validar el número de reset antes, con algún cursor o con un IF para que ejecutes una instrucción por cada vez que se ejecuta el trabajo, para que no te ocurra esta situación de que un registro con "Reset = 9" termine con "Reset = 11". Vamos, que ejecutar las instrucciones así secuencialmente te va a generar más errores de ese tipo.

Nomed 27-03-2009 19:24:47

Y si haga que entre cada uno de estos Update tenga 1 minuto de diferencia? Me pasaría lo mismo?

ContraVeneno 27-03-2009 19:34:35

pues supongo que sí, no importa si es con un minuto o con un día de dierencia

si un registro tiene un valor límite (9, 14, 29, 29, 39), te lo va a sumar dos veces.

El problema es que se ejecutan las instrucciones secuencialmente y solo debería ejecutarse una.

Nomed 27-03-2009 19:40:46

Es que yo creia que poniendo en el where el clevel a 370, 380 y asi consecutivamnete no tendria este problema

ContraVeneno 27-03-2009 19:57:42

imagina un registro que tenga "clevel = 420", "ctlCode = 5", "Reset = 9" y "money = 650000000"

al final de tu trabajo, ese registro va a terminar con "Reset = 11" y "money = 350000000" porque las condiciones de las dos primeras instrucciones se cumplen, por lo que se ejecutan las dos.

La solución es ejecutar solo una instrucción por cada vez que se ejecute el trabajo.

Nomed 27-03-2009 20:09:27

Una cosa si lo quisiera hacer todo en el mismo job como lo podria hacer?


La franja horaria es GMT +2. Ahora son las 03:33:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi