转换 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
解决此问题的方法是使用 CONVERT
或 CAST
将该行上的 @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。
我正在使用 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
解决此问题的方法是使用 CONVERT
或 CAST
将该行上的 @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。