2013-06-18 38 views
1

我是新來的遊標,所以我不知道如果我正確地這樣做,但我試圖環通臨時表的foreach行和計算使用Column_X COLUMN_Y值和一個變量的另一個值。變量值是正確的,但我沒有從光標獲取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