Pokud se při pokusu o provedení operace zřetězení v SQL Serveru zobrazí chybová zpráva „Konverze se nezdařila při převodu hodnoty varchar…, je pravděpodobné, že se pokoušíte zřetězit řetězec a číslo.
Pokud to uděláte, dojde k chybě, protože se SQL Server pokouší přidat řetězec a číslo namísto jejich zřetězení.
Chcete-li tento problém vyřešit, buď převeďte číslo na řetězec, nebo použijte funkci jako CONCAT()
nebo CONCAT_WS()
k provedení zřetězení.
Chyba
Zde je příklad kódu, který způsobuje chybu:
SELECT 'Player ' + 456;
Výsledek:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player ' to data type int.
SQL Server si myslí, že se pokoušíme přidat dva operandy, a tak narazí na problém při pokusu o přidání řetězce a čísla.
Řešení 1
Jedním ze způsobů, jak tento problém vyřešit, je explicitně převést číslo na řetězec:
SELECT 'Player ' + CAST(456 AS varchar(3));
Výsledek:
Player 456
To způsobí, že SQL Server pochopí, že se snažíme operandy zřetězit, místo abychom je přidali.
Řešení 2
Dalším způsobem, jak to udělat, je použít funkci jako CONCAT()
k provedení zřetězení:
SELECT CONCAT('Player ', 456);
Výsledek:
Player 456
CONCAT()
je řetězcová funkce, a tak SQL Server nyní chápe, že chceme zřetězit dva řetězce namísto sčítání dvou čísel.
Alternativně bychom mohli použít CONCAT_WS()
funkce, která nám umožňuje určit oddělovač, který se má použít mezi zřetězenými argumenty.