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

Откуда:
Сообщений: 9
есть процедура ну допустим изменяющая платеж после чего в таблице оплат делается своего рода разноска денег
ALTER procedure [dbo].[Изменить_Платеж]
		   @ID int,
           @ПлатДок tinyint,
           @Клиент_ID int,
           @ДатаС datetime,
           @ДатаПо datetime,
           @НомерДок int,
           @ДатаДок datetime,
           @СуммаДок float,
           @СуммаОплач float,
           @ДопУсл nvarchar(max),
           @Постфикс nvarchar(20),
           @ПдрДок bit,
           @ДатаОплСч datetime,
		   @Организация_ID int
as
Update  Платежи set
           ПлатДок=		@ПлатДок, 
           Клиент_ID=	@Клиент_ID, 
           ДатаС=		@ДатаС, 
           ДатаПо=		@ДатаПо, 
           НомерДок=	@НомерДок, 
           ДатаДок=		@ДатаДок, 
           СуммаДок=	@СуммаДок,
           СуммаОплач=	@СуммаОплач,
           ДопУсл=		@ДопУсл, 
           Постфикс=	@Постфикс, 
           ПдрДок=		@ПдрДок, 
           ДатаОплСч=	@ДатаОплСч,
		   Организация_ID=@Организация_ID 
where ID=@ID
declare @pl int,@plid int
set @pl=(select count(*) from Оплата where (ОплатаКлиента=0)and(СуммаКлиенту=@СуммаДок))
if (@pl>0)
	begin
		set @plid=(select min(ID) from Оплата where (ОплатаКлиента=0)and(СуммаКлиенту=@СуммаДок))
		update Оплата set 
			ОплатаКлиента=1,
			ОплКлтДата=@ДатаДок,
			Опл=@СуммаДок
		where ID=@plid
	end
else 
begin
	declare @sum decimal(18,2),@ID_opl int,@Sum_opl decimal(18,2),@opl decimal(18,2)
	set @sum=@СуммаДок
	DECLARE Cur CURSOR FOR
	SELECT Оплата.ID, СуммаКлиенту, Опл
	FROM Оплата inner join Заказы on Оплата.Заказ_ID=Заказы.ID
	WHERE (Клиент_ID =@Клиент_ID)and(ОплатаКлиента=0)
	OPEN Cur;
	FETCH NEXT FROM Cur
	INTO @ID_opl, @Sum_opl, @opl
	WHILE (@@FETCH_STATUS = 0)and(@sum<=0)
		BEGIN
			if (@sum>=@Sum_opl-isnull(@opl,0))
				begin
					update Оплата set
						ОплатаКлиента=1,
						ОплКлтДата=@ДатаДок,
						Опл=@Sum_opl-isnull(@opl,0)
					where ID=@ID_opl
					set @sum=@sum-@Sum_opl-isnull(@opl,0)
				end
			else 
				begin
					update Оплата set
						Опл=@Sum+isnull(@opl,0)
					where ID=@ID_opl
					set @sum=0
				end
			FETCH NEXT FROM Cur
			INTO @ID_opl, @Sum_opl, @opl
		END;
	CLOSE Cur;
	DEALLOCATE Сur;
end
выдает две ошибки не совсем понятно
Msg 16915, Level 16, State 1, Procedure Изменить_Платеж, Line 35
A cursor with the name 'Cur' already exists.
Msg 16916, Level 16, State 1, Procedure Изменить_Платеж, Line 77
A cursor with the name 'Сur' does not exist.
Помогите очень нужно!!!!
8 июн 11, 09:32    [10780453]     Ответить | Цитировать Сообщить модератору
 Re: Проблема не понятная мне с курсором!!!! Очень прошу помощи!!!  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> DEALLOCATE Сur;

тут вместо английской C русская С стоит.

Posted via ActualForum NNTP Server 1.4

8 июн 11, 09:36    [10780474]     Ответить | Цитировать Сообщить модератору
 Re: Проблема не понятная мне с курсором!!!! Очень прошу помощи!!!  [new]
HanIP
Member

Откуда:
Сообщений: 9
Спасибо совсем уже башка не шарит, надо пойти поспать наверное!!!
8 июн 11, 09:38    [10780486]     Ответить | Цитировать Сообщить модератору
 Re: Проблема не понятная мне с курсором!!!! Очень прошу помощи!!!  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
HanIP,

а все потому что не соблюдаете кошерность:) не кошерно объекты русскими буквами обзывать
8 июн 11, 10:09    [10780642]     Ответить | Цитировать Сообщить модератору
 Re: Проблема не понятная мне с курсором!!!! Очень прошу помощи!!!  [new]
HanIP
Member

Откуда:
Сообщений: 9
тоже не сторонник русских названий просто база в таком состоянии досталась.
8 июн 11, 10:52    [10780950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить