【问题标题】:Msg 4145, Level 15, State 1, Line 5 An expression of non-boolean type specified in a context where a condition is expected, near 'ucell'消息 4145,级别 15,状态 1,第 5 行在预期条件的上下文中指定的非布尔类型表达式,靠近“ucell”
【发布时间】:2020-05-29 11:41:18
【问题描述】:

我正在尝试在ON 之后使用LEFT JOIN 添加另一列,因为我想查看多个列

所以我尝试使用类似的东西

UPDATE [toolDB].[dbo].[esn_missing_in_DF_umts] 
SET [toolDB].[dbo].[esn_missing_in_DF_umts].[target_rnc] = 
             (CASE 
                 WHEN ESN_M_UMTS.target_vendor = 'HUA' 
                    THEN umts_carrier.rnc 
                    ELSE SHO.ucell_rnc 
              END)
FROM [toolDB].[dbo].[esn_missing_in_DF_umts] ESN_M_UMTS
LEFT JOIN [toolDB].[dbo].[df_umts_carrier] umts_carrier ON  ESN_M_UMTS.n_cell_name = umts_carrier.cell_name_umts
LEFT JOIN [toolDB].[dbo].[esn_umts_intra_sho] SHO ON ESN_M_UMTS.n_cell_name = SHO.[urelation] OR SHO.ucell

我得到这个错误:

消息 4145,第 15 级,状态 1,第 5 行
在预期条件的上下文中指定的非布尔类型表达式,靠近“ucell”。

错误一定在这部分:

LEFT JOIN [toolDB].[dbo].[esn_umts_intra_sho] SHO ON ESN_M_UMTS.n_cell_name = SHO.[urelation] OR SHO.ucell

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: sql sql-server tsql join sql-update


    【解决方案1】:

    这不是有效的 T-SQL(或者至少不会做你想做的事):

    ON ESN_M_UMTS.n_cell_name = SHO.[urelation] OR SHO.ucell
    

    这会将OR SHO.ucell 视为一个单独的条件,因此数据库会尝试在布尔上下文中对其进行评估,但此处失败。

    您可以改用IN

    ON ESN_M_UMTS.n_cell_name IN (SHO.[urelation], SHO.ucell)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      相关资源
      最近更新 更多