Sql 具有布尔值的条件存储过程
我正在尝试组装一个存储过程以返回一组结果 在我的页面上,我有三个复选框和一个搜索框 然后在存储过程中,我有:Sql 具有布尔值的条件存储过程,sql,stored-procedures,sql-server-2012,Sql,Stored Procedures,Sql Server 2012,我正在尝试组装一个存储过程以返回一组结果 在我的页面上,我有三个复选框和一个搜索框 然后在存储过程中,我有: CREATE Procedure [dbo].[sp_Search] @Bool1 bit = NULL, @Bool2 bit = NULL, @Bool3 bit = NULL, @SearchTerm nvarchar(30) As Begin Select [CompanyID], [CompanyName],
CREATE Procedure [dbo].[sp_Search]
@Bool1 bit = NULL,
@Bool2 bit = NULL,
@Bool3 bit = NULL,
@SearchTerm nvarchar(30)
As
Begin
Select
[CompanyID],
[CompanyName],
[Label],
[Bool1],[Bool2],[Bool3]
From [Contract Companies]
WHERE (CompanyName LIKE @SearchTerm OR [Label] LIKE @SearchTerm) AND
if(@Bool1 IS NOT NULL)
[Bool1] = 'True'
end
if(@Bool2 IS NOT NULL)
AND [Bool2] = 'True'
end
if(@Bool3 IS NOT NULL)
AND [Bool3] = 'True'
end
诸如此类,这三个布尔值并非始终为真,只是在选中它们的复选框时
我怎样才能做到这一点
提前谢谢你,拉齐尔你可以试试这样的东西:
create procedure [dbo].[sp_Search]
@Bool1 bit = null,
@Bool2 bit = null,
@Bool3 bit = null,
@SearchTerm nvarchar(30)
as
begin
select
CompanyID,
CompanyName,
Label,
Bool1,
Bool2,
Bool3
from Contract Companies
where (CompanyName like @SearchTerm or Label like @SearchTerm)
and (Bool1 = @Bool1 or @Bool1 is null)
and (Bool2 = @Bool2 or @Bool2 is null)
and (Bool3 = @Bool3 or @Bool3 is null)
end
当存在时,这将获得每个bool的匹配记录,否则将获得所有记录
值得注意的是,这是一种动态检查值的方法,但它们在这里是位,我认为它非常适合。这篇文章中讨论了一些备选方案。带有表达式的选项
CREATE Procedure [dbo].[sp_Search]
@Bool1 bit = NULL,
@Bool2 bit = NULL,
@Bool3 bit = NULL,
@SearchTerm nvarchar(30)
As
Begin
Select
[CompanyID],
[CompanyName],
[Label],
[Bool1],[Bool2],[Bool3]
From [Contract Companies]
WHERE (CompanyName LIKE @SearchTerm OR [Label] LIKE @SearchTerm) AND
[Bool1] = CASE WHEN @Bool1 IS NOT NULL THEN 'True' ELSE [Bool1] END AND
[Bool2] = CASE WHEN @Bool2 IS NOT NULL THEN 'True' ELSE [Bool2] END AND
[Bool3] = CASE WHEN @Bool3 IS NOT NULL THEN 'True' ELSE [Bool3] END
为什么不让这些参数不可为null,并且总是传递一个值呢?否则,你可能会使用一个。