微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在存储过程中构建动态WHERE子句

如何解决在存储过程中构建动态WHERE子句

尝试以下方法

WHERE 1 = 1
AND (@what     IS NULL OR [companies_SimpleList].[Description] Like @What )
AND (@keywords IS NULL OR companies_SimpleList.Keywords        Like @Keywords)
AND (@where    IS NULL OR companies_SimpleList.FullAdress      Like @Where)
...

如果任何参数的@what@where被发送到存储过程NULL值,那么所述条件将被忽略。您可以使用0而不是null作为测试值,这将类似于@what = 0 OR ...

解决方法

我正在使用SQL Server 2008
Express,并且具有一个存储过程,该存储过程SELECT基于参数执行from表。我有nvarchar参数和int参数。

这是我的问题,我的where子句如下所示:

WHERE [companies_SimpleList].[Description] Like @What 
    AND companies_SimpleList.Keywords Like @Keywords
    AND companies_SimpleList.FullAdress Like @Where
    AND companies_SimpleList.ActivityId = @ActivityId
    AND companies_SimpleList.DepartementId = @DepartementId
    AND companies_SimpleList.CityId = @CityId

此参数是我的ASP.NET MVC
3应用程序的用户设置的筛选器值,并且int可能未设置参数,因此它们的值将为0。这是我的问题,存储过程将搜索具有0asCityId值的项例如,为此,它将返回错误的结果。因此,基于int参数的值是否大于0,能够有一个动态的where子句会很好。

提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。