使用TSQL进行动态搜索

时间:2014-05-21 18:50:40

标签: sql sql-server tsql

我正在创建一个搜索页面来查询我的数据库,如下所示。

我正在尝试确定确定为此创建存储过程的最佳方法的最佳方法。我想显示与提交的任何数据匹配的结果,并忽略空数据的字段。

理解这种方法的理想方法是什么?

enter image description here

2 个答案:

答案 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