Получить весь или частичный результат из sql, используя один комманд TSQL - PullRequest
2 голосов
/ 26 апреля 2010

Вот мое состояние. В форме есть текстовое поле, если вы ничего не введете, оно вернет все строки в этой таблице. Если вы введете что-то, он вернет строки, чье Col1 соответствует вводу. Я пытаюсь использовать sql ниже, чтобы сделать это. Но есть одна проблема, эти столбцы допускают нулевое значение. Это не вернет строку со значением NULL. Есть ли способ вернуть все или совпадающие строки на основе ввода?

Обновление

Я использую ObjectDataSource и ControlParameter для передачи параметра, когда вход управления пуст, ObjectDataSource будет передавать DBNULL в комманду TSQL.

Col1   Col2   Col3
ABCD   EDFR   NULL
NULL   YUYY   TTTT
NULL   KKKK   DDDD


select * from TABLE where Col1 like Coalesce('%'+@Col1Val+'%',[Col1])

Ответы [ 4 ]

0 голосов
/ 27 апреля 2010

Используйте это:

SELECT   * 
FROM     TABLE 
WHERE    
    ( @Col1Value IS NOT NULL AND COALESCE(Col1, '') LIKE '%' + @Col1Val +'%' )
    OR @Col1Value IS NULL

Или, возможно, используйте это, чтобы null не закрадывался к вашему запросу:

string nullFilteredOutFromQueryString = @"SELECT   * 
FROM     TABLE 
WHERE    
    ( @Col1Value <> '' AND COALESCE(Col1, '') LIKE '%' + @Col1Val +'%' )
    OR @Col1Value = ''";


var da = new SqlDataAdapater(nullFilteredOutFromQueryString, c);
// add the TextBox's Text property directly to parameter's value.
// this way, null won't creep in to your query
da.SelectCommand.Parameters.AddWithValue("Col1Value", txtBox1.Text); 
da.Fill(ds, "tbl");
0 голосов
/ 26 апреля 2010

Вы пробовали

SELECT   * 
FROM     TABLE 
WHERE    COALESCE(Col1, '') LIKE COALESCE ('%'+@Col1Val+'%', [Col1]) 
0 голосов
/ 26 апреля 2010
SELECT * FROM [TABLE]
WHERE (Col1 LIKE '%'+@Col1Val+'%' OR (@Col1Val = '' AND Col1 IS NULL))
0 голосов
/ 26 апреля 2010

Нечто подобное может работать.

select * from TABLE where Coalesce(Col1,'xxx') like Coalesce('%'+@Col1Val+'%',Col1, 'xxx')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...