[Help] Процедура

Wikko0

Well-Known Member
Joined
Oct 17, 2012
Messages
660
Reaction score
263
Здрасти ;P
Пробвах да преправя една процедура, но нещо не стана както трябва!
CREATE PROCEDURE SP_POINT_ACCUMULATION
@Server tinyint, -- ???
@Square tinyint, -- ??

@AccountID varchar(10),
@CharacterName varchar(10),
@Class tinyint ,
@Point int

As
Begin

BEGIN TRANSACTION

SET NOCOUNT ON

IF EXISTS ( SELECT CharacterName FROM EVENT_INFO WITH (READUNCOMMITTED)
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName )
Begin
UPDATE EVENT_INFO
SET Point = Point + @Point , Square = @Square
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName
End
ELSE
Begin
INSERT INTO EVENT_INFO ( Server, Square, AccountID, CharacterName, Class, Point ) VALUES (
@Server,
@Square,
@AccountID,
@CharacterName,
@Class,
@Point
)
End


IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SET NOCOUNT OFF
End
GO

Искането ми беше да направя едно wPoint, което е Point само че с друго име (с цел Week Point DS)
Ето как го бях направил

CREATE PROCEDURE SP_POINT_ACCUMULATION
@Server tinyint, -- ???
@Square tinyint, -- ??

@AccountID varchar(10),
@CharacterName varchar(10),
@Class tinyint ,
@Point int ,
@wPoint int

As
Begin

BEGIN TRANSACTION

SET NOCOUNT ON

IF EXISTS ( SELECT CharacterName FROM EVENT_INFO WITH (READUNCOMMITTED)
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName )
Begin
UPDATE EVENT_INFO
SET Point = Point + @Point , Square = @Square , wPoint = Point + @wPoint
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName
End
ELSE
Begin
INSERT INTO EVENT_INFO ( Server, Square, AccountID, CharacterName, Class, Point, wPoint ) VALUES (
@Server,
@Square,
@AccountID,
@CharacterName,
@Class,
@Point,
@wPoint
)
End


IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SET NOCOUNT OFF
End
GO
Някой ако вижда евентуална грешка нека я поправи, ще съм му много благодарен.
 
Някой нямали да помогне?
 
Не си задал никаква стойност на @wPoint, а сървъра ти изобщо си няма никаква представа това какво всъщност е, не знам как очакваш да получиш някакъв резултат по този начин.
 
Не си задал никаква стойност на @wPoint, а сървъра ти изобщо си няма никаква представа това какво всъщност е, не знам как очакваш да получиш някакъв резултат по този начин.

Стойността на wPoint е зададена, прочети пак първите 10 реда на скрипта.

Не мисля, че има някаква грешка в скрипта. Сигурен ли си, че преди да изпълниш процедурата wPoint фигурира в таблицата на базата данни?

Ако е така - тогава опитай да преправиш началото на скрипта така:

-----

CREATE PROCEDURE SP_POINT_ACCUMULATION
@Server tinyint, -- ???
@Square tinyint, -- ??

@AccountID varchar(10),
@CharacterName varchar(10),
@Class tinyint ,
@Point int ,
@wPoint int

-----

Ако и по този начин не стане - нямам представа къде другаде може да е грешката.
 
Last edited:
  • Like
Reactions: Wikko0
Стойността на wPoint е зададена, прочети пак първите 10 реда на скрипта.

Той я е дефинирал, но никъде не задава на какво да е равна.
 
Той я е дефинирал, но никъде не задава на какво да е равна.

Да, прав си, аз греша. Съжалявам за объркването. Наистина трябва да и зададе стойност, преди да я вкара в калкулацията за "Point" и останалите променливи.
 
Ето процедурата трябва да работи. Няма смисъл да се декларира @wPoint просто се добавят точките в колонката wPoint=wPoint + @Point
@Point е стойността която ranking servera ще ти даде. И трабва да добавиш ръчно колонката wPoint int default 0 в таблица EVENT_INFO


Code:
CREATE PROCEDURE SP_POINT_ACCUMULATION
@Server tinyint, -- ???
@Square tinyint, -- ??

@AccountID varchar(10),
@CharacterName varchar(10),
@Class tinyint ,
@Point int
[COLOR="Red"]--@wPoint int --removed[/COLOR]

As
Begin

BEGIN TRANSACTION

SET NOCOUNT ON

IF EXISTS ( SELECT CharacterName FROM EVENT_INFO WITH (READUNCOMMITTED)
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName )
Begin
UPDATE EVENT_INFO
SET Point = Point + @Point , Square = @Square , wPoint = [COLOR="Red"]wPoint + @Point[/COLOR]
WHERE Server = @Server AND AccountID = @AccountID AND CharacterName = @CharacterName
End
ELSE
Begin
INSERT INTO EVENT_INFO ( Server, Square, AccountID, CharacterName, Class, Point, wPoint ) VALUES (
@Server,
@Square,
@AccountID,
@CharacterName,
@Class,
@Point,
[COLOR="Red"]@Point[/COLOR]
)
End


IF(@@Error <> 0 )
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION

SET NOCOUNT OFF
End
GO
 
Last edited:
  • Like
Reactions: Wikko0
Той я е дефинирал, но никъде не задава на какво да е равна.


Интиджърите притежават стойност по подразбиране 0, не е нужно да се пише, но все пак е добра практика да се прави.

* това важи в 99.99% от случаите, освен, ако езика за програмиране не е доста оплескан :D
 
А никой не ми каза как да го направя.Има колона wPoint в MEMB_INFO

Едит; Не съм видял на Иво поста, сега ще тества дали работи ; )
Едит 2; Error 110:There are fewer columns in the INSERT statement than values specifie in the VALUES clause. The number of values in the values clause must match the number of columns specifie in the INSERT statement!
 
Last edited:
колонката трябва да е в EVENT_INFO
копираш моя код и го добавяш без да го пипаш
 
  • Like
Reactions: Wikko0
Стана като моето което го бях направил ; ) Не ми изважда точките които съм взел след DS и не ми дава точки и в сяла!

Къде е проблема? btw влизам в ds с админския герой
 
Не искам да се повтарям за това ще ти дам линк с обяснението каде е проблема.
Първите 2 реда от тук http://darksteam.net/181397-post8.html
Иво златен си :*
Било е защото съм бил с админски герой, сега като тествах отново и всичко беше 6.

За да не правя нова тема, ще попитам директно тук, как да направя bc6 ранкинг, коя процедура трябва да барна и какво трябва да и барна?
Мерси предварително за отговора ;P
 
зависи с какви файлове си. на 97и99д на дарк нямат процедура, а ако си с други копирай процедурите да ги видим
 
зависи с какви файлове си. на 97и99д на дарк нямат процедура, а ако си с други копирай процедурите да ги видим

Еми с 97d файлове съм, но при някой мута които ползват тези файлове им става и с ранк от bc6. Дали това може да е от RankingServer-a и ако 'да' от къде мога да го взема (angel)