Sql 发布的代码@OHDept被分配任何值
无论在何处为其赋值,您都可以按照该语句执行以下操作:Sql 发布的代码@OHDept被分配任何值,sql,sql-server,tsql,Sql,Sql Server,Tsql,无论在何处为其赋值,您都可以按照该语句执行以下操作: set @OHDept = case when @OHDept = '15' then '16' else @OHDept end; 您似乎试图以一种类似于在过程语言中使用if的方式使用case。在SQL中,case是一个表达式,其计算结果为流中的值而不是分支 将15的值转换为16而其他值保持不变的表达式为: case where @OHDept = '15' then '16' else @OhDept end 听起来这个表达式应该属于
set @OHDept = case when @OHDept = '15' then '16' else @OHDept end;
您似乎试图以一种类似于在过程语言中使用
if
的方式使用case
。在SQL中,case
是一个表达式,其计算结果为流中的值而不是分支
将15
的值转换为16
而其他值保持不变的表达式为:
case where @OHDept = '15' then '16' else @OhDept end
听起来这个表达式应该属于select
子句,因为您提到了显示它
我还认为布尔逻辑把你绊倒了。通过这种方式,您可以很容易地将查询顶部的许多内容浓缩起来。您不需要严格使用括号,因为和
的优先级高于或
(
@Status in ('O', 'S') and ContractStatus in (1, 2, 3))
and MonthClosed > @ThroughMth
)
or
(
@Status = 'C' and ContractStatus = 3
and MonthClosed between @BegMthClosed and @EndMthClosed
)
or
(
@Status = 'A' and ContractStatus <> 0
)
(
@状态在('O','S')和合同状态在(1,2,3))
和MonthClosed>@到
)
或
(
@状态='C'和合同状态=3
以及在@BegMthClosed和@EndMthClosed之间的MonthClosed
)
或
(
@状态='A'和合同状态0
)
我认为这是基于注释中的日期的一些古老的过程,但是你仍然应该考虑:你想做什么?是否要使用@OHDept
筛选JCCI.Department
?或者你是在试图根据JCCI.Department设置@OHDept
?是的,这是一个非常古老的过程,我现在正在努力工作-感谢NOLOCK提示,我很感激!你说得对,我“我试图根据JCCI.Department设置@OHDept。“我这样做对自己太难了吗?”omchantichanti很乐意帮忙!谢谢,这很有帮助!由于这是我试图更新的如此古老的代码,我只是专注于我要添加的内容,但你完全正确,所有的布尔逻辑已经完全让我失望了。我很感激!
(
@Status in ('O', 'S') and ContractStatus in (1, 2, 3))
and MonthClosed > @ThroughMth
)
or
(
@Status = 'C' and ContractStatus = 3
and MonthClosed between @BegMthClosed and @EndMthClosed
)
or
(
@Status = 'A' and ContractStatus <> 0
)