2010-08-06 14 views

risposta

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 

È necessario lanciare l'DECIMAL come VARCHAR modo che l'uscita dalla dichiarazione CASE avere lo stesso valore di uscita.

+0

Ho avuto una situazione simile in cui stavo cercando di convertire in modo condizionale una colonna in decimale in base al contenuto della colonna. Stavo ricevendo questo errore fino a quando ho convertito i miei risultati decimali in varchar. Grazie molto! – cBlaine

0

devi fare questo:

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

perché il valore restituito da una colonna deve corrispondere, SQL Server tenterà di convertire il vostro VARCHAR ad un numerico, non il contrario, che è ciò che probabilmente lo vuoi

Che cosa è con quella convenzione di denominazione, btw?

+0

Grazie. Non lo sapevo! Funziona – user354427

0

È perché si hanno 2 variabili di tipi diversi, e anche se si sta tentando di restituire UNO di questi valori come "Numero_Troquel", devono essere tipi compatibili. Quello che sta facendo è provare a convertire la variabile @FQTROQ in DECIMAL.

Faresti sia bisogno di fare:

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

Grazie mille. Risposta facile Non sapevo – user354427

Problemi correlati