Sql server 使用case语句将错误获取为不正确的语法

Sql server 使用case语句将错误获取为不正确的语法,sql-server,sql-server-2008,Sql Server,Sql Server 2008,在存储过程中,我将代码放置为 SELECT * FROM [Order] O INNER JOIN Users U ON O.UserId=U.UserId INNER JOIN State S ON S.StateId=O.Billing_StateId INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId WHERE (CASE WHEN ISNULL(@Name,'')='' THEN 0=0 ELSE O.Bill

在存储过程中,我将代码放置为

SELECT *
FROM [Order] O 
INNER JOIN Users U ON O.UserId=U.UserId
INNER JOIN State S ON S.StateId=O.Billing_StateId
INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId
WHERE (CASE WHEN ISNULL(@Name,'')='' THEN 0=0  ELSE O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%' END)
AND (CASE WHEN ISNULL(@Email,'')='' THEN 0=0  ELSE O.Billing_Email LIKE '%' + @Email + '%' END)
但它给出了错误,因为语法不正确=

我不知道我在放置0=0时做错了什么

如果它是错误的,我应该在那里写些什么,我的问题可以吗


如果@Name参数不存在,则它将不检查第一个条件,并检查下一个条件

您的CASE语句错误

如果是条件,则必须定义新参数来替换条件

看这个(我不知道它是否有效)


你的案例陈述是错误的

如果是条件,则必须定义新参数来替换条件

看这个(我不知道它是否有效)

你可以试试这个

WHERE (@Name IS NULL OR( O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%' ))
AND (@Email IS NULL OR ( O.Billing_Email LIKE '%' + @Email + '%'))
你可以试试这个

WHERE (@Name IS NULL OR( O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%' ))
AND (@Email IS NULL OR ( O.Billing_Email LIKE '%' + @Email + '%'))
试试这个:

SELECT *
FROM [Order] O 
INNER JOIN Users U ON O.UserId=U.UserId
INNER JOIN State S ON S.StateId=O.Billing_StateId
INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId
WHERE 
(NULLIF(@Name,'') IS NULL OR O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%')
AND (NULLIF(@Email,'') IS NULL OR O.Billing_Email LIKE '%' + @Email + '%')
试试这个:

SELECT *
FROM [Order] O 
INNER JOIN Users U ON O.UserId=U.UserId
INNER JOIN State S ON S.StateId=O.Billing_StateId
INNER JOIN OrderStatus OS ON O.OrderStatusId=OS.OrderStatusId
WHERE 
(NULLIF(@Name,'') IS NULL OR O.Billing_FirstName LIKE '%' + @Name + '%' OR O.Billing_LastName LIKE'%' + @Name + '%')
AND (NULLIF(@Email,'') IS NULL OR O.Billing_Email LIKE '%' + @Email + '%')

这里有几个错误。我想如果你解释一下你想做什么,我们可以帮你更好。我的意思是,你想通过这个查询得到什么。我正在实现对项目列表的搜索,所以我只是在名称、电子邮件、州、城市的基础上进行查询。如果名称不在那里,那么它应该检查其他3项。这里有几个错误。我想如果你解释一下你想做什么,我们可以帮你更好。我的意思是,你想通过这个查询得到什么。我正在实现对项目列表的搜索,所以我只是在名称、电子邮件、州、城市的基础上进行查询。如果名称不存在,则应检查是否存在其他3项或条件不可能出现在case语句中,如O.Billing_FirstName(如“%”+名称+“%”或O.Billing_LastName(如“%”+名称+“%”)或O.Billing_LastName(如“%”+名称+“%”或O.Billing_LastName),此条件不可能出现在case语句中,如O.Billing_FirstName(如“%”+名称+“%”或O.Billing_LastName)像“%”+名称+“%”一样,这个条件是不可能的。我应该在这个条件中添加开始日期和结束日期吗?我的意思是,如果为null,则没有其他编码可以找到cinditionAND(@StartDate为null或(O.OrderDate>=@StartDate))和(@EndDate为null或(O.OrderDate如果@StartDate的参数被定义为date,那么上面的代码会起作用吗?我应该在这个条件中添加StartDate和end date如何?我的意思是如果为null,那么没有其他编码可以找到cinditionAND(@StartDate为null或(O.OrderDate>=@StartDate))和(@EndDate为null或(O.OrderDate如果@StartDate的参数被定义为date,那么上面的代码将起作用?0=0将返回布尔结果,我认为您不能使用等号(=)after THEN关键字,因为应该只有一条语句没有赋值或比较等。0=0将返回布尔结果,我认为您不能使用等号(=)after THEN关键字,因为应该只有一条语句没有赋值或比较等。