Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Незнаю почему не работает процедура  [new]
Ac1d
Member

Откуда:
Сообщений: 3
Вопрос . Сия поцедура заполняет поля PayDate которые соответствуют
определенному IDCard
Все вроде работает как надо но при попытке заполнить еще 1 дату уже в
заполненых полях PayDate в соотв. IDCard (т.е. к примеру все PayDate которые
соответствуют IDCard=1 заполнены а мы вызываем Payment 1,100 ) ничего не
происходит. При этом если повторно вызвать процедуру уже для IDCard =2 то
тоже не работает.
Кароче я думаю что я чето с курсором намутил но все равно никак не могу
понять где именно.у меня и бекап базы есть.
вобщем кому не лень или интересно то помогите плз . очень нада.
ALTER Procedure Payment
@IDCard varchar(50),
@PaymentSum int,
@Rest int OUTPUT
AS
--declare @Rest int
declare @IDCheck int
declare @DateCheck datetime
declare @SumPos int
declare @Counter int
Begin
SET @Rest=@PaymentSum
SET @Counter=0
Declare Cur_DateCheck CURSOR
FOR SELECT IDCard,DateCheck,SumPos
FROM MarketClubCardCheck
WHERE @IDCard=IDCard AND PayDate IS NULL
ORDER BY DateCheck ASC
OPEN Cur_DateCheck
Begin
WHILE (@@FETCH_STATUS=0)
BEGIN
Begin Tran
IF @Counter=0
Begin
FETCH Cur_DateCheck
INTO @IDCard,@DateCheck,@SumPos
End
IF @Rest>=@SumPos
Begin
UPDATE MarketClubCardCheck
SET PayDate=GETDATE()
WHERE PayDate IS NULL AND @IDCard=IDCard AND DateCheck=@DateCheck
SET @Rest=@Rest-@SumPos
SET @Counter=@Counter+1
IF @@error!=0 or @@rowcount=0
Begin
rollback Tran
BREAK
end
Commit Tran
CONTINUE
End
Else
Begin
Commit Tran
BREAK
End
IF @Counter!=0
Begin
FETCH Cur_DateCheck
INTO @IDCard,@DateCheck,@SumPos
End
END
End
END
CLOSE Cur_DateCheck
DEALLOCATE Cur_DateCheck
31 янв 05, 21:30    [1288870]     Ответить | Цитировать Сообщить модератору
 Re: Незнаю почему не работает процедура  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
ALTER Procedure Payment
@IDCard varchar(50),
@PaymentSum int,
@Rest int OUTPUT
AS
--declare @Rest int
declare @IDCheck int,
		@DateCheck datetime,
        @SumPos int,
        @rowcount int,
        @error int


Begin Tran

SET  @Rest=@PaymentSum
Declare Cur_DateCheck CURSOR FOR 
SELECT IDCard,DateCheck,SumPos
FROM MarketClubCardCheck
WHERE @IDCard=IDCard AND PayDate IS NULL
ORDER BY DateCheck ASC
OPEN Cur_DateCheck
fetch next from Cur_DateCheck into @IDCard,@DateCheck,@SumPos
WHILE ((@@FETCH_STATUS=0)and(@Rest>=@SumPos))
  BEGIN
	UPDATE MarketClubCardCheck
	SET PayDate=GETDATE()
	WHERE PayDate IS NULL AND IDCard = @IDCard AND DateCheck = @DateCheck
    select @rowcount = @@rowcount, @error = @@error
	IF @rowcount=0 
      BREAK
    IF @error <>0
      goto error
	SET @Rest = @Rest - @SumPos
  END
CLOSE Cur_DateCheck
DEALLOCATE Cur_DateCheck
COMMIT tran
return(1)
error:
Rollback tran
return(-1)

1 фев 05, 06:10    [1289099]     Ответить | Цитировать Сообщить модератору
 Re: Незнаю почему не работает процедура  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
Пардон - забыл внутренний fetch
ALTER Procedure Payment
@IDCard varchar(50),
@PaymentSum int,
@Rest int OUTPUT
AS
--declare @Rest int
declare @IDCheck int,
		@DateCheck datetime,
        @SumPos int,
        @rowcount int,
        @error int


Begin Tran

SET  @Rest=@PaymentSum
Declare Cur_DateCheck CURSOR FOR 
SELECT IDCard,DateCheck,SumPos
FROM MarketClubCardCheck
WHERE @IDCard=IDCard AND PayDate IS NULL
ORDER BY DateCheck ASC
OPEN Cur_DateCheck
fetch next from Cur_DateCheck into @IDCard,@DateCheck,@SumPos
WHILE ((@@FETCH_STATUS=0)and(@Rest>=@SumPos))
  BEGIN
    UPDATE MarketClubCardCheck
    SET PayDate=GETDATE()
    WHERE PayDate IS NULL AND IDCard = @IDCard AND DateCheck = @DateCheck
    select @rowcount = @@rowcount, @error = @@error
    IF @rowcount=0 
      BREAK
    IF @error <>0
      goto error
    SET @Rest = @Rest - @SumPos
    fetch next from Cur_DateCheck into @IDCard,@DateCheck,@SumPos
  END
CLOSE Cur_DateCheck
DEALLOCATE Cur_DateCheck
COMMIT tran
return(1)
error:
Rollback tran
return(-1)

1 фев 05, 06:13    [1289100]     Ответить | Цитировать Сообщить модератору
 Re: Незнаю почему не работает процедура  [new]
Z_Alex
Member

Откуда: Владивосток
Сообщений: 80
Дык, ты же открываешь курсор для записей где PayDate is null,
поэтому если они уже заполнены, то в курсор не попадают
1 фев 05, 06:46    [1289114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить