Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 发布的代码@OHDept被分配任何值_Sql_Sql Server_Tsql - Fatal编程技术网

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
)