Tsql t-sql:在then语句中将数据类型varchar转换为数字时出错

Tsql t-sql:在then语句中将数据类型varchar转换为数字时出错,tsql,Tsql,我无法理解错误,因为我没有尝试将变量@FQTROQ转换为数字 declare @FQTROQ varchar(30) declare @FQNUTQ decimal(6,0) set @FQTROQ = 'R-354' set @FQNUTQ = 100 SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '') THEN ( @FQTROQ ) ELSE ( @FQNUTQ ) END ) AS Numero_Troque

我无法理解错误,因为我没有尝试将变量@FQTROQ转换为数字

declare @FQTROQ varchar(30)
declare @FQNUTQ decimal(6,0)
set @FQTROQ = 'R-354'
set @FQNUTQ = 100

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( @FQNUTQ ) END ) AS Numero_Troquel
有什么帮助吗?谢谢

您需要这样做:

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( CAST(@FQNUTQ AS VARCHAR(30))) END ) AS Numero_Troquel
因为从列返回的值需要匹配,SQL Server将尝试将VARCHAR转换为数字,而不是相反,这可能是您想要的


顺便说一句,命名惯例是什么?

这是因为您有两个不同类型的变量,即使您只想将其中一个值作为Numero\u Troquel返回,它们也必须是兼容的类型。它正在尝试将@FQTROQ变量转换为十进制

您需要执行以下操作之一:

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( CAST(@FQNUTQ AS VARCHAR(30)) ) END ) AS Numero_Troquel
或者


您需要将十进制转换为VARCHAR,以便CASE语句的输出具有相同的输出值。

谢谢。我不知道!非常感谢。简单的回答我不知道我遇到过类似的情况,我试图根据列内容有条件地将列转换为十进制。在我将十进制结果转换回varchar之前,我一直遇到这个错误。非常感谢!
IF (@FQTROQ is not null and @FQTROQ <> '')
    SELECT @FQTROQ AS Numero_Troquel -- this will return as a VARCHAR
ELSE
    SELECT @FQNUTQ AS Numero_Troquel -- this will return as a DECIMAL
declare @FQTROQ varchar(30)
declare @FQNUTQ decimal(6,0)
set @FQTROQ = 'R-354'
set @FQNUTQ = 100

SELECT CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN @FQTROQ
ELSE CAST(@FQNUTQ AS VARCHAR(30)) END AS Numero_Troquel