Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Link to Entities:използване на ToLower() върху NText полета

Никога не използвайте .ToLower() за извършване на сравнение без разлика на главни и малки букви. Ето защо:

  1. Възможно е да е грешно (клиентското ви сравняване може да е, да кажем, турско, а сравняването на вашата база данни не).
  2. Това е високо неефикасен; Излъченият SQL е LOWER вместо = с подреждане без разлика на главни и малки букви.

Вместо това използвайте StringComparison.OrdinalIgnoreCase или StringComparison.CurrentCultureIgnoreCase :

var q = from f in Context.Foos
        where f.Bar.Equals("hi", StringComparison.OrdinalIgnoreCase)
        select f;

Но за Contains() има проблем:За разлика от Equals , StartsWith и т.н., той няма претоварване за StringComparison аргумент. Защо? Добър въпрос; попитайте Microsoft.

Това, комбинирано с ограничението на SQL Server за LOWER означава, че няма лесен начин да направите това, което искате.

Възможните заобиколни решения може да включват:

  • Използвайте пълен текстов индекс и направете търсенето в процедура.
  • Използвайте Equals или StartsWith вместо това, ако е възможно за вашата задача
  • Промяна на сортирането по подразбиране на колоната?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намалите размера на файл с данни в SQL Server (T-SQL)

  2. Грешка „Трябва да декларира скаларната променлива“ при предаване на параметър с таблична стойност към параметризиран SQL оператор

  3. Възстановяване на база данни от .mdf и .ldf файлове на SQL Server 2008

  4. Посочете към localhost\sqlexpress, като използвате само localhost

  5. Неуспешно преобразуване при преобразуване от символен низ в уникален идентификатор