Как выполнить поиск в сетке с использованием зарегистрированного столбца даты с помощью SQL-запроса - PullRequest
0 голосов
/ 26 апреля 2019

Как выполнить поиск в сетке с использованием столбца даты?

В базе данных SQL Server у меня есть таблица Priority с 3 столбцами id, name и registered date.Для зарегистрированной даты значением по умолчанию является getdate(), которое автоматически генерирует дату и время создания записи.Теперь в виде сетки, я хочу искать записи, используя эту зарегистрированную дату. В виде сетки, у меня есть выпадающий поиск, используя имя и дату.

CREATE PROCEDURE [dbo].[SEARCHPRIOR]
    @SearchBy VARCHAR(50),
    @SearchVal VARCHAR(50),
AS
BEGIN
    IF @SearchBy = '1'
    BEGIN
        SELECT * 
        FROM PRIORITY 
        WHERE P_NAME LIKE '%' + @SearchVal + '%'
    END
    ELSE IF @SearchBy = '2'
    BEGIN
        SELECT * 
        FROM PRIORITY 
        WHERE P_TS LIKE '%' + @SearchVal + '%'
    END
    ELSE
    BEGIN
        SELECT * FROM PRIORITY 
    END
END

Я попытался выполнить поиск по этому запросу, но не получил результатов.в виде сетки.Вот как выглядит таблица в SQL Server:

P_ID     P_NAME    P_TS
-------------------------------------------
1        High      2019-04-23 16:17:08.097
2        Medium    2019-04-24 16:17:23.070                                                               
3        Low       2019-04-25 16:17:32.420

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

public DataTable searchPRIOR(string searchBy, string searchVal)
{
    SqlCommand cmd = new SqlCommand("SEARCHPRIOR", con);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@SearchBy", searchBy);
    cmd.Parameters.AddWithValue("@SearchVal", searchVal);

    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    sda.Fill(dt);

    return dt;
}

1 Ответ

0 голосов
/ 26 апреля 2019

Ваша хранимая процедура не будет компилироваться из-за висящей запятой.

Ваши условия WHERE не могут использовать индекс, поэтому нет причин разделять его на несколько запросов.

Вы можете написать логику как:

CREATE PROC [dbo].[SEARCHPRIOR] (
    @SearchBy   varchar(50),
    @SearchVal  varchar(50)
) AS
BEGIN
    SELECT P.*
    FROM PRIORITY P
    WHERE (@SearchBy = '1' AND P_NAME like '%' + @SearchVal + '%') OR
          (@SearchBy = '2' AND P_TS like '%' + @SearchVal + '%') OR
          (COALESCE(@SearchBy, '') NOT IN ('1', '2'));
END;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...