/ / Falha na conversão de erro - sql, sql-server

Erro de conversão falhada - sql, sql-server

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 № 1

Seu 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