一尘不染

编写一个用于搜索多个条件的sql

sql

我有2个字段的学生表:

Name: nvarchar(256)
Age: int

用户将使用WinForm应用程序输入名称和年龄进行搜索。

  • 如果输入的名称为空,则sql不会查询“名称”字段。
  • 如果输入的年龄为0,则sql不会查询“年龄”字段。
  • 如果Name为Null且输入的Name为空->记录匹配。如果Name为Null且输入的Name不为空->记录不匹配。并且与“年龄”字段相似。

我的问题是如何编写这样的sql。

P / S:我使用SQL Server 2005。

请帮我。谢谢。


阅读 129

收藏
2021-05-16

共1个答案

一尘不染

一种方法是使参数可为空并使用此模式:

Create Procedure MyTest
(
    @param1 int = NULL,
    @param2 varchar = NULL 
)
AS
BEGIN

SELECT Blah...
FROM Table
WHERE
    ((@param1 IS NULL) OR (somecolumn = @param1)) AND
    ((@param2 IS NULL) OR (someothercolumn = @param2))


END

[注意:如果有很多参数,它可能会有参数嗅探的副作用…]

2021-05-16