【发布时间】:2015-10-29 20:37:01
【问题描述】:
我正在使用 SQL Server 2012 在 SSMS 中编写代码。 是否可以在某些条件下跳过 where 子句中的 case 语句?
例如这是我第一次尝试的:
Where
Case Substring(@@Servername,1,3)
when 'BCR' Then SM.ItemCode in (1,3)
When 'DCR' Then 'Some code to allow any Item Code'
Else SM.ItemCode = 1
End
and SM.ItemDesc like '%Car%'
它不喜欢这段代码,因为 Case 语句只能返回一个值。这是我在网上阅读后的第一个想法。但是,当我删除 in (1,3) 并使其仅 = 3 时。它说我在 = 附近的语法不正确,所以它似乎也不喜欢那样。
当时我尝试了这个:
Where SM.ItemCode in
(
Case Substring(@@Servername,1,3)
when 'BCR' Then 1
When 'DCR' Then 'So code to allow any Item Code'
Else 1
End,
Case Substring(@@Servername,1,3)
When 'BCR' Then 3
Else 1
End
)
and SM.ItemDesc like '%Car%'
这似乎解决了在“BCR”处检查两个不同项目代码的问题,但我不确定如何解决“DCR”处可能是任何项目代码的问题。
我的最新想法是添加另一个这样的案例:
Where
Case SUBSTRING(@@Servername,1,3)
When 'DCR' then SM.ItemCode = any
Else
SM.ItemCode in
(
Case Substring(@@Servername,1,3)
when 'BCR' Then 1
Else 1
End,
Case Substring(@@Servername,1,3)
When 'BCR' Then 3
Else 1
End
)
End
and SM.ItemDesc like '%Car%'
然而,这仍然在 = 错误附近给出不正确的语法。
【问题讨论】:
-
case表达式的结果是一个值而不是更多逻辑。 -
如果您可以发布您的数据是什么样的以及您的查询的预期结果是什么,这将是有帮助的。
标签: sql-server-2012 case where-clause any