2015-05-07 90 views
0

我正在使用T-SQL和遊標來列出emp數據庫。轉換varchar時轉換失敗。使用t-sql中的遊標工作

這裏是我的代碼:

DECLARE cursors CURSOR FOR 
    SELECT 
     emp.Ename, emp.Sal 
    FROM Emp 
    WHERE Sal > 200 

DECLARE @surname VARCHAR(50), @salary INT 

PRINT 'Employees earning more than 200:' 

OPEN cursors 
FETCH NEXT FROM cursors INTO @surname, @salary 

WHILE @@FETCH_STATUS = 0 
BEGIN 
     PRINT @surname + ' ' + @salary 
     FETCH NEXT FROM cursors INTO @surname, @salary 
END 

CLOSE cursors 
DEALLOCATE cursors 

的問題是,當我嘗試執行我得到這個消息的代碼:

Employees earning more than 200: Msg 245, Level 16, State 1, Line 8
Conversion failed when converting the varchar value 'SMITH ' to data type int.

難道我做錯了什麼?如何解決它?

回答

3

您正在試圖爲整數添加到該行的字符串:PRINT @surname + ' ' + @salary

方式解決這個問題是對@salary轉換對符合CONVERTCAST這裏爲varchar是一種與CONVERT做到這一點:

PRINT @surname + ' ' + CONVERT(varchar(100), @salary) 

這裏是爲int與CAST爲varchar轉換方式:

PRINT @surname + ' ' + CAST(@salary AS varchar(100)) 

一定要設置在varchar數量,以適應​​數字是@salary都會有,否則你會得到這個錯誤的最大數量:

Arithmetic overflow error converting numeric to data type varchar. 

至於爲什麼它抱怨SMITH被轉換成int是因爲Data Type Precedence。優先級較低的數據類型嘗試轉換爲較高優先級的數據類型。 varchar的優先級低於int,因此試圖將SMITH轉換爲int。

+0

謝謝!有效! :) – Ganjira

+0

@Ganjira歡迎您! :) –

2

我想你可能需要轉換/施放@salary爲varchar到打印:

PRINT @surname + ' ' + convert(varchar(10),@salary) 
相關問題