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