2015-05-07 2 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 на этой строке VARCHAR с CONVERT или CAST Вот способ сделать это с CONVERT:

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

Вот способ, чтобы преобразовать Int в VARCHAR с CAST:

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

Обязательно установите число в varchar для размещения на максимальное количество цифр, которые @salary будут иметь, иначе вы получите эту ошибку:

Arithmetic overflow error converting numeric to data type varchar. 

относительно того, почему он жалуется на SMITH преобразуется в целом это происходит из-за Data Type Precedence. Типы данных с более низким приоритетом пытаются преобразовать в типы данных с более высоким приоритетом. varchar имеет более низкий приоритет, чем int, следовательно SMITH пытается преобразовать в int.

+0

Спасибо! Это сработало! :) – Ganjira

+0

@Ganjira Ваше добро пожаловать! :) –

2

Я думаю, что вам, возможно, придется конвертировать/литой @salary к VARCHAR, чтобы распечатать его:

PRINT @surname + ' ' + convert(varchar(10),@salary)