Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Linq to Entities :menggunakan ToLower() pada bidang NText

Jangan pernah menggunakan .ToLower() untuk melakukan perbandingan case-insensitive. Inilah alasannya:

  1. Mungkin salah (pemeriksaan klien Anda bisa jadi, katakanlah, Turki, dan susunan DB Anda tidak).
  2. Ini sangat tidak efisien; SQL yang Dipancarkan LOWER bukannya = dengan susunan yang peka huruf besar/kecil.

Sebagai gantinya, gunakan StringComparison.OrdinalIgnoreCase atau StringComparison.CurrentCultureIgnoreCase :

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

Tapi untuk Contains() ada masalah:Tidak seperti Equals , StartsWith , dll., tidak memiliki kelebihan untuk StringComparison argumen. Mengapa? Pertanyaan bagus; tanya Microsoft.

Itu, dikombinasikan dengan batasan SQL Server pada LOWER berarti tidak ada cara sederhana untuk melakukan apa yang Anda inginkan.

Solusi yang mungkin dapat dilakukan meliputi:

  • Gunakan indeks teks lengkap, dan lakukan pencarian dengan prosedur.
  • Gunakan Equals atau StartsWith sebagai gantinya, jika memungkinkan untuk tugas Anda
  • Ubah susunan default kolom?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara meneruskan parameter ke Fungsi Bernilai Tabel

  2. INSERT nilai yang dihapus ke dalam tabel sebelum DELETE dengan DELETE TRIGGER

  3. Mengembalikan nilai dari pernyataan INSERT di SQL Server 2008

  4. Cara Melihat Paket Eksekusi Kueri di Azure Data Studio (SQL Server)

  5. Mengapa cadangan SQL Server jauh lebih besar daripada file DB?