Tsql 转换varchar时,转换失败。使用t-sql中的游标

Tsql 转换varchar时,转换失败。使用t-sql中的游标,tsql,sql-server-2012,windows-server-2012,Tsql,Sql Server 2012,Windows Server 2012,我正在使用T-SQL和游标列出emp数据库 这是我的密码: 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 curs

我正在使用T-SQL和游标列出
emp
数据库

这是我的密码:

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
问题是,当我尝试执行代码时,会收到以下消息:

收入超过200的员工:Msg 245,16级,州1,第8行
将varchar值“SMITH”转换为数据时,转换失败 输入int


我做错什么了吗?如何解决它?

我认为您可能需要将/cast@salary转换为varchar来打印它:

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

我认为您可能需要将@salary转换/转换为varchar来打印它:

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

您正在尝试向此行中的字符串添加一个整数:
PRINT@name+'+@salary

解决此问题的方法是使用
convert
CAST
将该行的
@salary
转换为varchar

PRINT @surname + ' ' + CONVERT(varchar(100), @salary)
下面是一种使用
CAST
将int转换为varchar的方法:

PRINT @surname + ' ' + CAST(@salary AS varchar(100))
确保在
varchar
中设置数字,以容纳
@salary
将具有的最大位数,否则您将得到以下错误:

Arithmetic overflow error converting numeric to data type varchar.

至于为什么它抱怨史密斯被转换成int,那是因为。优先级较低的数据类型尝试转换为优先级较高的数据类型
varchar
的优先级低于
int
,因此
SMITH
试图将其转换为int。

您试图在此行的字符串中添加一个整数:
PRINT@names+'+@salary

解决此问题的方法是使用
convert
CAST
将该行的
@salary
转换为varchar

PRINT @surname + ' ' + CONVERT(varchar(100), @salary)
下面是一种使用
CAST
将int转换为varchar的方法:

PRINT @surname + ' ' + CAST(@salary AS varchar(100))
确保在
varchar
中设置数字,以容纳
@salary
将具有的最大位数,否则您将得到以下错误:

Arithmetic overflow error converting numeric to data type varchar.

至于为什么它抱怨史密斯被转换成int,那是因为。优先级较低的数据类型尝试转换为优先级较高的数据类型
varchar
的优先级低于
int
,因此
SMITH
试图转换为int。

@Ganjira欢迎您!)@甘吉拉:欢迎你我也有类似的错误,但我的循环在整个范围内循环后下降:-(知道为什么吗?我有类似的错误,但我的循环在整个范围内循环后下降:-(知道为什么吗?