получить все строки из базы данных, если параметр добавлен к предложению where, равному нулю - PullRequest
0 голосов
/ 11 октября 2018

У меня есть большой выбор с условием где.

WHERE ADB.param1=@param

В Куда я посылаю переменную param

        SqlParameter param1Param = cmd.Parameters.AddWithValue("@param1", param1);
        if (param1== null)
        {
            param1Param.Value = DBNull.Value;
        }

Этот код работает следующим образом.Когда запрос выполняется, он всегда проверяет состояние ADB.param1=param, а когда я отправляю DBNull.Value, он ничего не получает из базы данных.Но вместо этого я хочу, чтобы

, если param == null

, тогда он не обращал внимания на это условие и получал все строки из базы данных.Как мне этого достичь?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вот один прием, который даже не требует изменения вашего кода C #:

WHERE ADB.param1 = COALESCE(@param, ADB.param1)

Для значений, отличных от SQL NULL, @param должен равняться столбцу ADB.param1.В противном случае предложение WHERE всегда будет истинным и будет возвращать все записи.

0 голосов
/ 11 октября 2018

Если вы хотите вернуть все строки, где параметр @param1 равен нулю, используйте ...

where (@param1 is null or ADB.param1 = @param1)

Если вы хотите вернуть только те строки, в которых значение столбца равноparam пустое использование ...

where ((@param1 is null and ADB.param1 is null) or ADB.param1 = @param1)
0 голосов
/ 11 октября 2018

Я предполагаю, что ваш запрос WHERE ADB.param1=@param1

Попробуйте с WHERE (ADB.param1=@param1 OR @param1 IS NULL)

...