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.