2010-08-06 29 views

Respuesta

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 

Es necesario emitir el DECIMAL como VARCHAR modo que la salida de la declaración CASE tener el mismo valor de salida

+0

Tuve una situación similar en la que estaba tratando de convertir de forma condicional una columna a decimal en función del contenido de la columna. Estaba obteniendo este error hasta que cambié mis resultados decimales a varchar. ¡Muchas gracias! – cBlaine

0

que tiene que hacer esto:

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

porque el valor de regresar de una columna debe coincidir, SQL Server tratará de convertir su VARCHAR a un valor numérico, no al revés, que es lo probablemente quieras

¿Qué hay con esa convención de nomenclatura, por cierto?

+0

Gracias. ¡No lo sabía! Funciona – user354427

0

Es porque tiene 2 variables de diferentes tipos, y aunque solo está tratando de devolver UNO de esos valores como "Numero_Troquel", tienen que ser tipos compatibles. Lo que está haciendo es tratar de convertir la variable @FQTROQ en un DECIMAL.

Se podría o bien tiene que hacer:

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

O ...

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

Muchas gracias. Respuesta fácil No sabía – user354427

Cuestiones relacionadas