Строковые функции прекрасно работают со строками символов Юникода; те, которые заботятся о количестве символов, рассматривают двухбайтовый символ как один символ, а не два символа. Единственные, на что нужно обратить внимание - это len () и datalength (), которые возвращают разные значения при использовании юникода. Конечно, они возвращают правильные значения - len () возвращает длину в символах, а datalength () возвращает длину в байтах. Они просто разные из-за двухбайтовых символов.
Итак, до тех пор, пока вы используете правильные функции в вашем коде, все должно работать прозрачно.
РЕДАКТИРОВАТЬ : просто дважды проверил Books Online , данные Unicode работали без проблем со строковыми функциями с SQL Server 2000.
EDIT 2 : Как указано в комментариях, строковые функции SQL Server не поддерживают полный набор символов Unicode из-за отсутствия поддержки парсинга суррогатов вне плоскости 0 (или, другими словами, Строковые функции SQL Server распознают только до 2 байтов на символ.) SQL Server будет правильно хранить и возвращать данные, однако любая строковая функция, основанная на количестве символов, не будет возвращать ожидаемые значения. Наиболее распространенный способ обойти это, кажется, либо обрабатывать строку вне SQL Server, либо использовать интеграцию CLR для добавления функций обработки строк с поддержкой Unicode.