转换 varchar 时转换失败。使用来自 t-sql 的游标

Conversion failed when converting the varchar. Working with cursors from t-sql

我正在使用 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

问题是当我尝试执行代码时收到此消息:

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.

我是不是做错了什么?如何解决?

我想你可能需要 convert/cast @salary 到 varchar 来打印它:

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

您正在尝试将整数添加到此行中的字符串:PRINT @surname + ' ' + @salary

解决此问题的方法是使用 CONVERTCAST 将该行上的 @salary 转换为 varchar 以下是使用 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 被转换为 int 是因为 Data Type Precedence。优先级较低的数据类型会尝试转换为优先级较高的数据类型。 varchar 的优先级低于 int,因此 SMITH 试图转换为 int。