如何使用日期列搜索网格视图?
在一个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;
}
答案 0 :(得分:0)
由于逗号悬空,您的存储过程将无法编译。
您的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的调用方式(未定义)可能是个问题。