我正在创建一个搜索页面来查询我的数据库,如下所示。
我正在尝试确定确定为此创建存储过程的最佳方法的最佳方法。我想显示与提交的任何数据匹配的结果,并忽略空数据的字段。
理解这种方法的理想方法是什么?
答案 0 :(得分:0)
一种方法是在WHERE
条件中,使用OR @param IS NULL
。像这样:
CREATE PROCEDURE YourProcedure @param int AS
SELECT Field
FROM YourTable
WHERE (SomeField = @param OR @param IS NULL)
答案 1 :(得分:0)
另一种选择是使用Dynamic sql并根据传递给过程的参数过滤结果。这样的事情......
CREATE PROCEDURE usp_SearchProc
@Col1_Val [Datatype],
@Col2_Val [Datatype],
@Col3_Val [Datatype]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' SELECT * FROM TableName WHERE 1 = 1'
+ CASE WHEN @Col1_Val IS NOT NULL
THEN N' AND Col1 = @Col1_Val ' ELSE '' END
+ CASE WHEN @Col2_Val IS NOT NULL
THEN N' AND Col2 = @Col2_Val ' ELSE '' END
+ CASE WHEN @Col3_Val IS NOT NULL
THEN N' AND Col3 = @Col3_Val ' ELSE '' END
EXECUTE sp_executesql @Sql
,N'@Col1_Val [Datatype],@Col2_Val [Datatype],@Col3_Val [Datatype]'
,@Col1_Val [Datatype],@Col2_Val [Datatype],@Col3_Val [Datatype]
END