Sql 如何在where子句中使用Case语句赋值
我试图实现的逻辑是,如果Sql 如何在where子句中使用Case语句赋值,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我试图实现的逻辑是,如果greatPlainsUserId不为null,则使用它,否则使用userName,但我会得到语法错误 ... WHERE (CASE WHEN @greatPlainsUserId IS NULL THEN BUYERID = @userName ELSE BUYERID = @greatPlainsUserId END) AND... 卸下外壳。只要使用简单的逻辑: WHERE ((@greatPlains
greatPlainsUserId
不为null,则使用它,否则使用userName
,但我会得到语法错误
...
WHERE (CASE
WHEN @greatPlainsUserId IS NULL
THEN BUYERID = @userName
ELSE BUYERID = @greatPlainsUserId
END)
AND...
卸下
外壳
。只要使用简单的逻辑:
WHERE ((@greatPlainsUserId IS NULL AND BUYERID = @userName) OR
(BUYERID = @greatPlainsUserId)
)
第二个条件仅在@greatPlainsUserId不为NULL时有效,因此该条件是冗余的
或者:
WHERE BUYERID = COALESCE(@greatPlainsUserId, @userName)
这可能是最简单的逻辑。删除案例。只要使用简单的逻辑:
WHERE ((@greatPlainsUserId IS NULL AND BUYERID = @userName) OR
(BUYERID = @greatPlainsUserId)
)
第二个条件仅在@greatPlainsUserId不为NULL时有效,因此该条件是冗余的
或者:
WHERE BUYERID = COALESCE(@greatPlainsUserId, @userName)
这可能是最简单的逻辑。只要使用ISNULL()
它就可以处理这两种情况。运行下面的测试代码以查看。如果IssCost不为空,它将使用IssCost。如果为空,则会显示“Boooo!”
很抱歉我的懒惰示例数据,我已经制作了数据,不想对其进行太多修改:)
只需使用ISNULL()
即可解决这两种情况。运行下面的测试代码以查看。如果IssCost不为空,它将使用IssCost。如果为空,则会显示“Boooo!”
很抱歉我的懒惰示例数据,我已经制作了数据,不想对其进行太多修改:)
它可能是语义,但它是一个case表达式,而不是case语句,它是一个表达式,因为它返回一个值。即使是微软也犯了这个错误,但我认为,将其称为声明会导致人们试图像您所做的那样将其作为控制流来使用。如需进一步阅读,请参阅-基本上您只需使用类似于的case,其中BUYERID=(当@greatPlainsUserId为NULL时,则为@userName ELSE@greatPlainsUserId END)
。。这基本上就是BUYERID=ISNULL(@greatPlainsUserId,@userName)
所做的事情。一个case
表达式返回一个值,但不支持boolean
。在join
条件中使用case
的示例如下。(有一种数据类型(值为TRUE、FALSE和UNKNOWN),但您无法牢牢把握其中一种类型:“与其他SQL Server数据类型不同,布尔数据类型不能指定为表列或变量的数据类型,也不能在结果集中返回。”)它可能是语义,但它是一个case表达式,而不是case语句,它是一个表达式,因为它返回一个值。即使是微软也犯了这个错误,但我认为,将其称为声明会导致人们试图像您所做的那样将其作为控制流来使用。如需进一步阅读,请参阅-基本上您只需使用类似于的case,其中BUYERID=(当@greatPlainsUserId为NULL时,则为@userName ELSE@greatPlainsUserId END)
。。这基本上就是BUYERID=ISNULL(@greatPlainsUserId,@userName)
所做的事情。一个case
表达式返回一个值,但不支持boolean
。在join
条件中使用case
的示例如下。(有一种数据类型(值为TRUE、FALSE和UNKNOWN),但您无法牢牢把握其中一种类型:“与其他SQL Server数据类型不同,布尔数据类型不能指定为表列或变量的数据类型,也不能在结果集中返回。”)