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

Bagaimana menangani parameter sql dinamis

Bergantung pada implementasi khusus, kami memiliki dua pendekatan umum untuk masalah ini:

1) Buat pernyataan filter secara dinamis untuk kueri SQL dalam kode yang melewatkan parameter apa pun yang kosong. Ini adalah pendekatan terbaik jika Anda mengizinkan pengguna untuk memilih beberapa nilai untuk satu kolom (yaitu, pilih 0 atau lebih dari 50 status untuk memfilter data).

Misalnya:

Dengan asumsi txtCondition1 dan txtCondition2 adalah kotak teks:

        // Assuming conn is an open SqlConnection

        System.Text.StringBuilder sbSQL = new StringBuilder(500);

        List<SqlParameter> cParameters = new List<SqlParameter>();

        // Add a default condition of 1=1 so that all subsequent conditions can be added 
        // with AND instead of having to check to see whether or not any other conditions
        // were added before adding AND.
        sbSQL.Append("SELECT * FROM MyTestTable WHERE 1 = 1 ");

        if (!String.IsNullOrEmpty(txtCondition1.Text)) {
            sbSQL.Append(" AND Column1 = @Column1");
            cParameters.Add(new SqlParameter("@Column1", txtCondition1.Text));
        }
        if (!String.IsNullOrEmpty(txtCondition1.Text))
        {
            sbSQL.Append(" AND Column2 = @Column2");
            cParameters.Add(new SqlParameter("@Column2", txtCondition2.Text));
        }

        SqlCommand oCommand = new SqlCommand(sbSQL.ToString, conn);
        if (cParameters.Count != 0) 
        {
            oCommand.Parameters.AddRange(cParameters.ToArray());
        } 

        // Do something with oCommand

2) Jika nilai lebih dibatasi, kami biasanya meneruskannya ke prosedur tersimpan, yang bertanggung jawab untuk menentukan apakah nilai akan dievaluasi atau tidak dengan menguji parameter untuk "kekosongan", baik null, string kosong, 0 untuk numerik , dll.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa gunanya tanda kurung siku [] dalam pernyataan sql?

  2. Mengulangi recordset di SQL Server

  3. Perbedaan antara datetime dan timestamp di sqlserver?

  4. OpenRowSet dan OpenDataSet tanpa hak sysadmin

  5. Bagaimana cara menggunakan alias di klausa where?