Lower () в Visual Studio 2010 SQL-запрос не работает.Альтернативы? - PullRequest
0 голосов
/ 02 сентября 2011

Вот сделка.

У меня есть 2 базы данных. Один старше и имеет расширенные данные. Другой более новый и имеет менее важные данные. Они оба используют одни и те же продукты, только у одного больше данных.

Я начал проект, в котором я хочу расширить более новую базу данных, включив в нее некоторые отсутствующие данные, которые существуют в более старой. Проблема в том, что идентификаторы не совпадают между базами данных. Поэтому мне приходится искать по именам. Какой может или не может быть тот же случай. Запросы в visual studio ОПРЕДЕЛЕННО чувствительны к регистру. Я проверял это, и я уверен.

Итак, моей первой мыслью было сделать поиск с более низкой функцией. Как это:

WHERE lower([Name1]) LIKE lower('%Name2%') 

но когда я запустил его, это дало мне ошибку. И Visual Studio автоматически пыталась изменить синтаксис оператора на это:

WHERE 'lower'([Name1]) LIKE 'lower'('%Name2%') 

Я мог бы поклясться, что более низкий () был правильный синтаксис. И я не могу найти в Google ни слова, ни альтернативы или почему визуальной студии это не понравится. На самом деле я только что попробовал подобную строчку в SQL Management Studio, и она сработала. Почему он не работает в Visual Studio?

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Используйте COLLATE для указания чувствительности к регистру.Просто принудительно сопоставьте регистр без учета регистра, если это необходимо.Это может не понадобиться, в зависимости от существующего сопоставления данных.Например:

1005 *
1 голос
/ 02 сентября 2011

Во-первых, VS не выполняет запрос, сортировка по столбцу, который вы запрашиваете, определит, будет ли SQL обрабатывать его как чувствительный к регистру или нет. Кроме того, поскольку вы используете LIKE в своем сравнении, то, что вы на самом деле хотите, выглядит как:

WHERE lower([Name1]) LIKE '%' + lower([Name2]) '%'
0 голосов
/ 02 сентября 2011

Использовать WHERE lower([Name1]) LIKE '%name2%' Поскольку это значение является постоянным (или входным значением?), Вам не нужно преобразовывать его в более низкое значение.Вы можете сделать это заранее.Также не уверен насчет [ ... ].Они также не нужны.

Но я думаю, что лучшим вариантом было бы сообщить базе данных, что вы хотите сравнивать без учета регистра, примерно так :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...