2013-11-18 2 views
-2

Это мой работает не-SQL запросов:Как написать эквивалентный оператор Sqlite для запроса, приведенного ниже?

Query = "select Cust_Id,Card_Number,Clients_Title,Address_Current,Phone_Number,Mobile_Number from Customer_New Where 1=1"; 
try 
{ 
    if (txt_title.Text != "") 
     Query += " and Clients_Title Like '%" + txt_title.Text + "%'"; 
    if (txt_address.Text != "") 
     Query += " and Address_Current Like '%" + txt_address.Text + "%'"; 
    if (txt_phone.Text != "") 
     Query += " and Phone_Number Like '%" + txt_phone.Text + "%'"; 
    if (txt_mobile.Text != "") 
     Query += " and Mobile_Number Like '%" + txt_mobile.Text + "%'"; 
    if (cbo_location.Text != "") 
     Query += " and AreaLocation Like '%" + cbo_location.Text + "%'"; 
} 

catch { } 

В этом коде обработка «где» оговорка:

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

  • , если какой-то текст вводится в любом текстовом поле 1, то секция в «где» производится
    положение на этом конкретном текстовом поле

  • , если какой-то текст вводится в любом текстовом поле многократным затем раздел в «где» раздел производится в соответствии с ними, выполняя «И» состояние между ними .Это означает, все значения, введенные в текстовые поля должны совпадать с соответствующие строки атрибутов

Здесь я пытаюсь написать эквивалентное заявление SQL.

SELECT Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation 
FROM Customer_New 
WHERE (@Clients_Title IS NULL OR Clients_Title = @Clients_Title) 
AND (@Address_Current IS NULL OR Address_Current = @Address_Current) 
AND (@Phone_Number IS NULL OR Phone_Number  = @Phone_Number) 
AND (@Mobile_Number IS NULL OR Mobile_Number = @Mobile_Number) 
AND (@AreaLocation IS NULL OR AreaLocation  = @AreaLocation) 

Проблема в этом запросе:

Это поиск NULL или «» (пустая строка) из БД tablt, если ничего не предусмотрено в тексте box.I хочет, как в приведенном выше коде, если ничего не вводится в текстовое поле, атрибут get skip from where where и только значения, указанные в текстовом поле, рассматриваются для проверки в where clause.Can sql case и if else condition help в этом сценарии? Может ли кто-нибудь сказать мне, как я могу это сделать? Спасибо

Примечание: в хранимой процедуре sqlite не выходить. Так что мне нужно написать правильный SQL-запрос в соответствии со сценарием.

+0

У меня есть также попробовал это и получил тот же результат SELECT Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation FROM Customer_New WHERE (@Clients_Title = '' ИЛИ ​​Клиенты_Title LIKE '%' + @ Clients_Title + '%') И (@Address_Current = '' ИЛИ ​​Address_Current LIKE '%' + @ Address_Current + '%') AND (@Phone_Number = '' ИЛИ ​​Номер_пользователя LIKE '%' + @ Phone_Number + '%') AND (@Mobile_Number = '' ИЛИ ​​Mobile_Number LIKE ' % '+ @ Mobile_Number +'% ') AND (@AreaLocation =' 'ИЛИ AreaLocation LIKE'% '+ @ AreaLocation +'% ') –

+0

ваш пример не работает ???? – mb14

+0

мой nonsql-запрос работает .. но я хочу написать эквивалентный SQL-запрос ... мой SQL-запрос не работает –

ответ

0

Используйте условия

(@Clients_Title = '' 
OR ((@Clients_Title != '') AND (Clients_Title = @Clients_Title) 

и так далее.

Вот полная версия

SELECT Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, 
     Phone_Number, Mobile_Number, AreaLocation FROM Customer_New 
WHERE (@Clients_Title = '' 
     OR (@Clients_Title != '' AND Clients_Title LIKE '%'[email protected]_Title+'%')) 
    AND (@Address_Current = '' 
     OR (@Address_Current != '' AND Address_Current LIKE '%'[email protected]_Current+'%')) 
    AND (@Phone_Number = '' 
     OR (@Phone_Number != '' AND Phone_Number LIKE '%'[email protected]_Number+'%')) 
    AND (@Mobile_Number = '' 
     OR (@Mobile_Number != '' AND Mobile_Number LIKE '%'[email protected]_Number+'%')) 
    AND (@AreaLocation = '' 
     OR (@AreaLocation != '' AND AreaLocation LIKE '%'[email protected]+'%')) 

См комментарий ниже для подачи «» вместо NULL аргументов. В противном случае условия становятся слишком уродливыми, например.:

AND (@AreaLocation = '' OR @AreaLocation IS NULL 
     OR ((@AreaLocation != '' AND @AreaLocation IS NOT NULL) 
      AND AreaLocation LIKE '%'[email protected]+'%')) 
+0

, пожалуйста, напишите полный запрос, который может выполнить сценарий. –

+0

Я думаю, что условие, которое вы написали, не будет выполнено, потому что оно не будет пропустить какое-либо условие из условия where, если значение, введенное в текстовое поле, равно 'или null. Ваш запрос будет искать нулевую форму db table .., о которой я упоминал; условие, в котором предложение должно пропустить, если значение равно null –

+0

Как данные могут быть «или NULL? Если поле остается пустым, какое значение присваивается переменной? Ваш вход должен написать одну из двух переменных, а не то, и другое. Вышеописанное хорошо работает, если пустое текстовое поле установит переменную в '. Или вы указываете одно пробел, а не пустое значение? '' '' или '''' – BobbyScon

0

Вы, вероятно, нужно проверить, если параметр является пустой строкой, так что вы можете сделать

AND (@param IS NULL OR @param = '' OR @param = param) 
0

В-прошлом я сделал запрос, выполнить мои требования

SELECT  Cust_Id, Clients_Title, Card_Number, Key_Person, Address_Current, Phone_Number, Mobile_Number, AreaLocation 
FROM   Customer_New 
    where  (CASE 
     WHEN @Clients_Title != '' THEN [email protected]_Title 
     ELSE 
     NULL IS NULL 
     END) 
     AND(CASE 
     WHEN @Address_Current != '' THEN Address_Current [email protected]_Current 
     ELSE 
     NULL IS NULL 
     END) 
       AND(CASE 
     WHEN @Phone_Number != '' THEN [email protected]_Number 
     ELSE 
     NULL IS NULL 
     END) 
     AND(CASE 
     WHEN @Mobile_Number != '' THEN [email protected]_Number 
     ELSE 
     NULL IS NULL 
     END) 
     AND(CASE 
     WHEN @AreaLocation != '' THEN AreaLocation [email protected] 
     ELSE 
     NULL IS NULL 
     END) 
Смежные вопросы