Forum FAQ: Why do I get a 'conversion failed' error when using the CASE expression?
Question
In SQL Server, I use a CASE expression to return different values base on a variable’s value. However, I get a 'conversion failed' error.
The T-SQL statement is as follows:
DECLARE @i INT
SET @i = 1
SELECT CASE
WHEN @i=0 THEN 1
ELSE 'a'
END
The error message is as follows:
Conversion failed when converting the varchar value 'a' to data type int.
Answer
For a CASE expression, the returned data type is the highest precedence type from the set of types in result_expressions and the optional else_result_expression
Because int has a higher precedence then varchar, the returned data type of the CASE expression is int. However, since varchar ‘a’ cannot be converted to a int value, the error occurs. We can convert the higher precedence type to the lower precedence type to fix it.
For example,
DECLARE @i INT
SET @i = 1
SELECT CASE
WHEN @i=0 THEN CONVERT(varchar,1)
ELSE 'a'
END
More Information
https://msdn.microsoft.com/en-us/library/ms181765.aspx
https://msdn.microsoft.com/en-us/library/ms190309.aspx
Applies to
SQL Server 2000
SQL Server 2005
SQL Server 2008
SQL Server 2008 R2