Cade Rouxの回答には、置換が成功した場合(SQL照合が使用された場合)と失敗した場合(Windows照合が使用された場合)の2つの異なる動作があります。その理由は、使用される照合のタイプにあります。
この動作は、ほぼ4年前にMicrosoftに提出されました:
Q: NUL文字をreplace()で置換しようとすると、これは機能します。値にはSQL照合がありますが、Windows照合はありません。
A: これは、0x0000がWindowscollationsの未定義の文字であるという事実によるものです。未定義の文字はすべて、比較、並べ替え、およびパターンマッチング中に無視されます。したがって、「a」+ char(0)の検索は、実際には「a」の検索であり、char(0)の検索は空の文字列と同等です。
未定義の文字を処理する方法は少し混乱しますが、これはWindowsがそれらを並べ替えるために定義した方法であり、SQLServerは一般的なWindowsAPIに準拠しています。
SQL照合では、未定義の文字の概念はありません。各コードポイントには重みが割り当てられているため、問題は発生しません。
しかし残念ながら、それはまだ文書化されていません。
したがって、唯一の解決策は、照合をSQL照合に変更することであるようです(例:SQL_Latin1_General_CP1_CI_AS
使用することもできます。
以前の回答を不要として削除しました