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

Как да обработваме динамични sql параметри

В зависимост от конкретната реализация имаме два общи подхода към този проблем:

1) Динамично изграждане на израза за филтър за SQL заявката в кода, като пропуска всички параметри, които са празни. Това е най-добрият подход, ако позволите на потребителя да избере множество стойности за една колона (т.е. изберете 0 или повече от 50-те състояния, за да филтрирате данните).

Например:

Ако приемем, че txtCondition1 и txtCondition2 са текстови полета:

        // 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) Ако стойностите са по-ограничени, ние обикновено ги предаваме на съхранена процедура, която е отговорна за определянето дали стойността трябва да бъде оценена или не чрез тестване на параметъра за "празноти", или нула, празен низ, 0 за числа и т.н.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на определена част от низа в T-SQL

  2. Намерете общия брой минути, като игнорирате припокриването (преобразуване на базиран на курсора отговор в CTE)

  3. Грешка при аритметично препълване в SQL

  4. Как да проверите нивото на съвместимост на базата данни в SQL Server с помощта на T-SQL

  5. SELECT max(x) връща null; как мога да го накарам да върне 0?