Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Linq to Entities:sử dụng ToLower () trên các trường NText

Không bao giờ sử dụng .ToLower() để thực hiện so sánh không phân biệt chữ hoa chữ thường. Đây là lý do tại sao:

  1. Có thể sai (đối chiếu ứng dụng khách của bạn có thể là tiếng Thổ Nhĩ Kỳ, còn đối chiếu DB của bạn thì không).
  2. rất cao không hiệu quả; SQL được gửi là LOWER thay vì = với đối chiếu không phân biệt chữ hoa chữ thường.

Thay vào đó, hãy sử dụng StringComparison.OrdinalIgnoreCase hoặc StringComparison.CurrentCultureIgnoreCase :

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

Nhưng đối với Contains() có vấn đề:Không giống như Equals , StartsWith , v.v., nó không có quá tải cho StringComparison tranh luận. Tại sao? Câu hỏi hay; hỏi Microsoft.

Điều đó, kết hợp với giới hạn của SQL Server về LOWER có nghĩa là không có cách nào đơn giản để làm những gì bạn muốn.

Các giải pháp khả thi có thể bao gồm:

  • Sử dụng chỉ mục văn bản đầy đủ và thực hiện tìm kiếm theo một quy trình.
  • Sử dụng Equals hoặc StartsWith thay vào đó, nếu có thể cho nhiệm vụ của bạn
  • Thay đổi đối chiếu mặc định của cột?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận ID hàng được chèn cuối cùng (với câu lệnh SQL)

  2. Câu lệnh SQL CASE

  3. Chẩn đoán bế tắc trong SQL Server 2005

  4. Loại bỏ các ký tự mở rộng ASCII 128 trở đi (SQL)

  5. Thủ tục được lưu trữ - trả về danh tính dưới dạng tham số đầu ra hoặc đại lượng vô hướng