2010-08-06 49 views
5

我无法理解错误,因为我没有试图将数字变量@FQTROQ转换为数字。t-sql:将数据类型varchar转换为数字在语句中时出错

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 

任何帮助?感谢

回答

4
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 

你需要转换DECIMALVARCHAR使来自CASE语句的输出具有相同的输出值。

+0

我有一个类似的情况,我试图根据列内容有条件地将列转换为十进制。我得到这个错误,直到我将我的十进制结果铸造回varchar。非常感谢! – cBlaine 2013-08-16 11:52:44

0

你需要这样做:

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

,因为从一列返回的值需要匹配,SQL Server将尝试将VARCHAR转换为数值,而不是其他方式,这是什么你可能想要。

这是什么命名约定,顺便说一句?

+0

谢谢。我不知道! It Works – user354427 2010-08-06 10:41:50

0

这是因为你有两个不同类型的变量,即使你只是试图返回其中的一个值为“Numero_Troquel”,它们必须是兼容的类型。它所做的是试图将@FQTROQ变量转换为DECIMAL。

你会要么需要做的:

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

或者......

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 
+0

非常感谢。简单的答案我不知道 – user354427 2010-08-06 10:42:17

相关问题