如何解决在存储过程中构建动态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。这是我的问题,存储过程将搜索具有0
asCityId
值的项例如,为此,它将返回错误的结果。因此,基于int参数的值是否大于0,能够有一个动态的where子句会很好。
提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。