Sql 转换失败错误
我正在尝试运行下面的查询Sql 转换失败错误,sql,sql-server,Sql,Sql Server,我正在尝试运行下面的查询 DECLARE @A VARCHAR(256) = '3.5' SELECT CASE @A WHEN 'N/A' THEN -1 ELSE @A END 但我得到了这个错误: 将varchar值“3.5”转换为数据类型int时,转换失败 我不明白为什么 您的CASE表达式返回两种不同类型的数据: CASE @A WHEN 'N/A' THEN -1 -- returns an INT ELSE @A
DECLARE @A VARCHAR(256) = '3.5'
SELECT
CASE @A WHEN 'N/A' THEN -1 ELSE @A
END
但我得到了这个错误:
将varchar值“3.5”转换为数据类型int时,转换失败
我不明白为什么 您的
CASE
表达式返回两种不同类型的数据:
CASE @A
WHEN 'N/A' THEN -1 -- returns an INT
ELSE @A -- returns VARCHAR(256)
END
SQL Server现在将尝试规范化此响应,并尝试将这两个响应转换为具有更高优先级的数据类型(有关详细信息,请参见:在MSDN上)-在本例中为INT
。因此,SQL Server尝试将@A
转换为INT
,但显然失败了
CASE
是T-SQL中的一个表达式——它精确返回一个原子值,以及所有不同的“路径”在情况下
表达式应返回相同的数据类型——否则会遇到类似的问题……问题是-1是int,@a是varchar
这应该适合您:将-1也设为varchar
DECLARE @A varchar(256) = '3.5'
SELECT
CASE @A WHEN 'N/A' THEN '-1' ELSE @A
END
问题是
-1
是int
,@A
是varchar
。将-1设为varchar。看我的回答:)时钟显示这个答案比marc_的迟了1分钟,而且基本上是相同的答案。@DanBracuk是的,但我的评论是先发布的:)不知道为什么不投票,因为它是正确的
Try this
DECLARE @A VARCHAR(200) = '4.5'
SELECT CASE @A WHEN 'N/A' THEN CAST(-1 AS VARCHAR) ELSE @A END