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

Pesan Dengan menggunakan parameter untuk nama kolom

Anda seharusnya dapat melakukan sesuatu seperti ini:

SELECT *
FROM
    TableName
WHERE
    (Forename LIKE '%' + @SearchValue + '%') OR
    (Surname LIKE '%' + @SearchValue + '%') OR
    (@SearchValue = 'ALL')
ORDER BY 
    CASE @OrderByColumn
    WHEN 1 THEN Forename
    WHEN 2 THEN Surname
    END;
  • Tetapkan 1 ke @OrderByColumn untuk mengurutkan Forename .
  • Tugaskan 2 untuk mengurutkan Surname .
  • Dll... Anda dapat memperluas skema ini ke jumlah kolom yang berubah-ubah.

Hati-hati tentang kinerja sekalipun. Jenis konstruksi ini dapat mengganggu kemampuan pengoptimal kueri untuk menemukan rencana eksekusi yang optimal. Misalnya, meskipun Forename dicakup oleh indeks, kueri mungkin masih memerlukan pengurutan lengkap alih-alih hanya melintasi indeks secara berurutan.

Jika itu masalahnya, dan Anda tidak dapat hidup dengan implikasi kinerja, mungkin perlu untuk memiliki versi kueri yang terpisah untuk setiap urutan pengurutan yang mungkin, sehingga memperumit banyak hal di sisi klien.



  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 DELETE dengan INNER JOIN

  2. Ubah varchar menjadi datetime di SQL Server

  3. 4 Cara Mendapatkan Riwayat Pekerjaan SQL Server

  4. Bagaimana COUNT() Bekerja di SQL Server

  5. Bagaimana cara mengganti nama sesuatu di SQL Server yang memiliki tanda kurung siku di namanya?