2013-06-18 3 views
1

Я новичок в курсорах, поэтому не уверен, что я делаю это правильно, но я пытаюсь выполнить цикл из таблицы temp foreach и вычислить значение для Column_Y, используя Column_X и другое значение переменной. Значение переменной правильное, но я не получаю значения для Column_X из курсора. Смотрите ниже:SQL - CURSOR неправильно задает значения

SQL:

DECLARE @id INT 
DECLARE @val DECIMAL 
DECLARE @percent DECIMAL 

DECLARE my_cursor CURSOR FOR 
SELECT a.Id, a.Val FROM #Temp_Tbl a 

OPEN my_cursor 

FETCH FROM my_cursor INTO @id, @val 

WHILE @@FETCH_STATUS = 0 
BEGIN 
[email protected] is of type DECIMAL & is populated previously 
PRINT Convert(varchar,@id) + ': (' + Convert(varchar,@val) + '/' + Convert(varchar,@Total) + '),' 
SELECT @percent = @val/@Total 
UPDATE #Temp_Tbl SET PERCENT_OF = @percent WHERE Id = @id 
FETCH NEXT FROM my_cursor INTO @id, @val 
END 

CLOSE my_cursor 
DEALLOCATE my_cursor 

РЕЗУЛЬТАТЫ:

| ID | Val | PERCENT_OF | 
| 1 | 25 | 1   | 
| 2 | 45 | 0   | 
| 3 | 30 | 0   | 

сообщения Выход:

2: (1/200) --NOTE: It's not printing the first record but 1 does get updated in the 
3: (0/200) --PERCENT_OF column in the first row & 0 in the second. 
Может

кто скажите, где я здесь ошибся? Спасибо за любую помощь.

+0

в запросе перед курсором. '@ Total' правильно заполняется. Bc мои сообщения« Печать »имеют правильное значение для' @ Total'. – ExceptionLimeCat

+0

Какой тип чисел хранится в столбце 'PERCENT_OF'? Десятичное или целое число? –

+0

Извините, что .. –

ответ

1

Проблема в том, что вы используете DECIMAL, не указав на точность и масштаб. Сколько десятичных чисел вы хотите ?. Вы должны всегда явно использовать точность и масштаб. Попробуйте что-то вроде этого:

DECLARE @id INT 
DECLARE @val DECIMAL(16,4) 
DECLARE @percent DECIMAL(16,4) 
+0

Оказывается, мой столбец 'PERCENT_OF' не был объявлен с точностью и масштабом, вызывающим проблему. Спасибо за помощь. – ExceptionLimeCat

Смежные вопросы