Tsql 转换varchar时,转换失败。使用t-sql中的游标
我正在使用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
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欢迎您!)@甘吉拉:欢迎你我也有类似的错误,但我的循环在整个范围内循环后下降:-(知道为什么吗?我有类似的错误,但我的循环在整个范围内循环后下降:-(知道为什么吗?