V odpovědi Cade Roux existují dvě různá chování:nahrazení je úspěšné (když je použito řazení SQL) a neúspěšné (je použito řazení Windows). Důvodem je typ použitého řazení.
Toto chování bylo společnosti Microsoft předloženo téměř před 4 lety:
Otázka: Při pokusu o nahrazení znaku NUL pomocí replace() to funguje, pokud má hodnota řazení SQL, ale ne řazení Windows.
Odpověď: To je způsobeno skutečností, že 0x0000 je ve Windowscollations nedefinovaný znak. Všechny nedefinované znaky jsou během porovnávání, řazení a porovnávání vzorů ignorovány. Takže hledání pro 'a' + char(0) je ve skutečnosti hledání 'a' a hledání char(0) je ekvivalentní prázdnému řetězci.
Způsob, jak zacházet s nedefinovanými znaky, je trochu matoucí, ale je to způsob, který systém Windows definoval, aby je třídil, a SQL Server odpovídá obecnému rozhraní Windows API.
V řazení SQL neexistuje pojem nedefinovaného znaku. Každému kódovému bodu je přiřazena váha, proto v tom nevidíme problém.
ale bohužel je stále nezdokumentovaný.
Zdá se tedy, že jediným řešením je změnit řazení na řazení SQL (např. SQL_Latin1_General_CP1_CI_AS
lze také použít).
Odstranil jsem svou předchozí odpověď jako nepotřebnou