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

Откуда:
Сообщений: 33
Есть такая процедура.
Почему то не обновляет цену.
Скидка считается на каждый код, там вроде все правильно....
Уверен что сам запрос на обновление цены с ошибкой.
Не подскажите где ошибка.
dbo.Base_Spec1(@tr_id) - функция там можно обновлять и добавлять данные...

ALTER PROCEDURE [dbo].[sp_apply_discount]
	(
		@tr_id int,
		@k_id int
	)
AS
	SET NOCOUNT ON 
	declare @discount real 
	declare @price int
	declare @qty int
	declare @g_id int
	declare @g_name_rest nvarchar(100)
	declare spec_cursor CURSOR  KEYSET		
	FOR
	select g_id, price from dbo.Base_Spec1(@tr_id)
	for update of price

	open spec_cursor
	fetch first from spec_cursor into @g_id, @price
	while @@FETCH_Status = 0
	begin
		set @discount =dbo.get_opt_discount(@g_id,@k_id)
		update dbo.Base_Spec1(@tr_id)
			set price=Round(price * (1-isnull(@discount,0)),2)
			where current of spec_cursor 
		fetch next from spec_cursor into @g_id, @price
	end
	close spec_cursor
	deallocate spec_cursor


Сообщение было отредактировано: 27 июл 09, 12:18
30 янв 09, 18:31    [6760983]     Ответить | Цитировать Сообщить модератору
 Re: current of spec_cursor  [new]
Александр Третьяков
Member

Откуда: Украина, г. Тернополь
Сообщений: 549
похожей проблемой страдал целый день :), у меня была попроще ошибка.
просто несколько советов
1. declare spec_cursor це глобальный курсор, лучше сделай переменной
DECLARE @view_saldo CURSOR
SET @view_saldo=CURSOR
FOR SELECT 

2. Я бы написал так
DECLARE @spec_cursor CURSOR
SET @spec_cursor=CURSOR KEYSET
FOR
select g_id, price from dbo.Base_Spec1
where tr_id=@tr_id
for update of price
3. Поставь себе маячки внутри курсора
27 июл 09, 12:17    [7463204]     Ответить | Цитировать Сообщить модератору
 Re: current of spec_cursor  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36814
Александр Третьяков
похожей проблемой страдал целый день :), у меня была попроще ошибка.
просто несколько советов
1. declare spec_cursor це глобальный курсор, лучше сделай переменной
DECLARE @view_saldo CURSOR
SET @view_saldo=CURSOR
FOR SELECT 

2. Я бы написал так
DECLARE @spec_cursor CURSOR
SET @spec_cursor=CURSOR KEYSET
FOR
select g_id, price from dbo.Base_Spec1
where tr_id=@tr_id
for update of price
3. Поставь себе маячки внутри курсора
Как вы думаете, человек, задавший вопрос пол года назад, ждет на него до сих пор ответа?
27 июл 09, 12:19    [7463222]     Ответить | Цитировать Сообщить модератору
 Re: current of spec_cursor  [new]
Александр Третьяков
Member

Откуда: Украина, г. Тернополь
Сообщений: 549
ой батенька...
update dbo.Base_Spec1(@tr_id)
не уверен что можно сделать курсор на функцию...
умываю руки. Помочь ничем не смогу
27 июл 09, 12:24    [7463257]     Ответить | Цитировать Сообщить модератору
 Re: current of spec_cursor  [new]
Александр Третьяков
Member

Откуда: Украина, г. Тернополь
Сообщений: 549
:) туплю второй раз. пора в отпуск.
У меня это топик был вверху...
Вытирайте.
27 июл 09, 12:26    [7463270]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить