Пробелы в конце не всегда игнорируются. Я столкнулся с этой проблемой сегодня.Моя таблица имела столбцы NCHAR и была присоединена к данным VARCHAR.Поскольку данные в таблице были не такими широкими, как ее поле, SQL Server автоматически добавлял конечные пробелы.
У меня была ITVF (встроенная табличная функция), которая принимала параметры varchar.Параметры использовались в соединении с таблицей с полями NCHAR.
Соединения не были выполнены, поскольку данные, передаваемые в функцию, не имели конечных пробелов, а данные в таблице -.Почему это было?
Меня смутило ДЕЙСТВИЕ ТИПА ДАННЫХ.(См. http://technet.microsoft.com/en-us/library/ms190309.aspx)
. При сравнении строк различных типов, тип с более низким приоритетом перед сравнением преобразуется в тип с более высоким приоритетом. Поэтому мои параметры VARCHAR были преобразованы в NCHAR.и, видимо, пробелы были значительными.
Как я это исправил? Я изменил определение функции, чтобы использовать параметры NVARCHAR, которые имеют более высокий приоритет, чем NCHAR. Теперь SQL Server автоматически заменяет NCHAR на NVARCHAR изавершающие пробелы были проигнорированы.
Почему я просто не выполнил RTRIM? Тестирование показало, что RTRIM убил производительность, предотвращая оптимизацию JOIN, которую SQL Server мог бы использовать в противном случае.изменить тип данных таблицы? Таблицы уже установлены на сайтах клиентов, и они не хотят запускать сценарии обслуживания (время + деньги, чтобы платить администраторам баз данных) или предоставлять нам доступ к их машинам (понятно).