Условное условие Where в SQL-запросе - PullRequest
10 голосов
/ 03 мая 2011

У меня есть приложение MVC для генерации отчета. Я предоставил много вариантов поиска, как показано ниже

Customer id
Customer name
Customer E-mail
State
Country 

Пользователь 1:

Если какой-либо пользователь будет вводить только некоторые значения, такие как

Customer id = 1
Customer name = A

По умолчанию другие параметры передаются хранимой процедуре как нулевые.

Customer E-mail
State
Country 

Пользователь 2:

Если какой-то пользователь будет вводить только некоторые значения, такие как

Клиент E-mail=xtz@gmail.com

По умолчанию другие параметры передаются хранимой процедуре как нулевые.

Customer id
Customer name
State
Country 

Как я могу использовать предложение where в запросе SQL в хранимой процедуре. Можем ли мы сделать это, как показано ниже

string qry = select * from table_name where status != d

if (@customerID!=null)
    qry = qry + "and customer_id=@customerID"
if (@customerName!=null)
    qry = qry + "and customer_name=@customerName"

Пожалуйста, дайте мне лучший подход к этому.

Спасибо, Велит

Ответы [ 3 ]

10 голосов
/ 03 мая 2011

Если вы создаете динамический SQL, вы можете сделать то же, что и выше:

DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL =  'SELECT * FROM TABLE '
if (@customerID != null)
    SQL = SQL + " AND customer_id = @customerID"

Или другой вариант - обращаться с этим как

SELECT *
FROM TABLE
WHERE (customerID IS NULL OR customer_id = @customerID)

Я предпочитаю второе, так как оно использует параметризованную переменную. В первом примере необходимо более тщательно учитывать вредоносный ввод.

3 голосов
/ 03 мая 2011

Вы можете сделать динамический SQL, но более простой метод:

WHERE (ISNULL(@param1,1) = 1 OR [col1] = @param1)
    AND (ISNULL(@param2,1) = 1 OR [col2] = @param2)
    AND ...
0 голосов
/ 03 мая 2011

вам нужно будет передать все переменные в качестве параметров в SP, а затем выполнить свою логику там.

SqlCommand cmd  = new SqlCommand("STORED_PROC_NAME", conn);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@CustomerID", custId));
var rdr = cmd.ExecuteReader();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...