为什么这会失败? ('='附近的语法不正确)

时间:2015-06-11 14:08:48

标签: sql-server

为什么这会失败?

GO
    select vcCarrier1, vcTerminal1, vcZipEnd
      FROM   [GroundEDI].[dbo].[tblCustomerRouting]
      HAVING
      ( (CASE  WHEN vcCarrier1 = 'Carrier Code' 
        THEN vcTerminal1 = 'STM'
        ELSE NULL
        END)
       -- ELSE vcTerminal1 
       AND
       (CASE WHEN vcZipEnd = 'ZIP'
       THEN vcTerminal1 = 'Terminal Code'
       ELSE NULL
        END))

Msg 102,Level 15,State 1,Line 5 '='附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

这些行不正确:THEN vcTerminal1 = 'STM'THEN vcTerminal1 = 'Terminal Code'。 在Then语句的case子句中,只能有一个返回标量值的表达式,而不是比较而不是赋值。

我猜(因为你的尝试不太清楚)它应该是这样的:

SELECT vcCarrier1, vcTerminal1, vcZipEnd
FROM   [GroundEDI].[dbo].[tblCustomerRouting]
WHERE vcTerminal1 = 
    CASE WHEN vcCarrier1 = 'Carrier Code' THEN 
        'STM'
    WHEN vcZipEnd = 'ZIP' THEN
         'Terminal Code'
    ELSE 
        vcTerminal1 
    END

答案 1 :(得分:0)

你没有逻辑表达。顺便说一下,只对聚合值有意义。

也许这句话会产生你试图实现的结果?

select vcCarrier1, vcTerminal1, vcZipEnd
FROM   [GroundEDI].[dbo].[tblCustomerRouting]
WHERE (vcCarrier1 = 'Carrier Code'  AND  vcTerminal1 = 'STM') OR 
        (vcZipEnd = 'ZIP' AND vcTerminal1 = 'Terminal Code')

祝你好运, 离子