Eu estou tentando executar a consulta abaixo
DECLARE @A VARCHAR(256) = "3.5"
SELECT
CASE @A WHEN "N/A" THEN -1 ELSE @A
END
mas eu recebo este erro:
A conversão falhou ao converter o valor varchar "3.5" para o tipo de dados int.
Eu não consigo descobrir o porquê!
Respostas:
7 para resposta № 1Seu CASE
expressão retorna dois tipos diferentes de dados:
CASE @A
WHEN "N/A" THEN -1 -- returns an INT
ELSE @A -- returns VARCHAR(256)
END
O SQL Server tentará agora normalizar esta resposta e tenta converter ambas as respostas para o tipo de dados com a precedência mais alta (veja: Precedência de tipo de dados no MSDN para detalhes) - neste caso, INT
. Então, o SQL Server tenta converter @A
para um INT
e obviamente falha.
CASE
é um expressão em T-SQL - retorna exatamente um valor atômicoe todos diferentes "caminhos" em um CASE
expressão deve retornar o mesmo tipo de dados - caso contrário, você terá problemas como esse ....
2 para resposta № 2
o problema é que -1 é int e @A é varchar
isso deve funcionar para você: faça o -1 como varchar também
DECLARE @A varchar(256) = "3.5"
SELECT
CASE @A WHEN "N/A" THEN "-1" ELSE @A
END
1 para resposta № 3
Try this
DECLARE @A VARCHAR(200) = "4.5"
SELECT CASE @A WHEN "N/A" THEN CAST(-1 AS VARCHAR) ELSE @A END