获取错误"关键字附近的语法不正确' as'"

时间:2018-04-30 21:57:58

标签: sql sql-server

我收到此错误:

  

关键字' as'

附近的语法不正确

但我无法弄清问题是什么。

SELECT 
    tef.TicketEntryId, tef.FieldName,
    CASE 
       WHEN TRY_CONVERT(UNIQUEIDENTIFIER, tef.FieldValue) IS NOT NULL 
          THEN lli.Name 
          ELSE 
             CASE 
                WHEN tef.FieldDataType = 'BOOL' 
                   THEN CAST(tef.FieldValue AS BIT)
                   ELSE tef.FieldValue 
             END AS FieldValue
FROM 
    TicketEntry.TicketExtendedField tef
LEFT JOIN 
    RefList.LookupListItem lli ON CAST(lli.LookupListItemId AS VARCHAR(36)) = tef.FieldValue
WHERE 
    tef.TicketEntryId = 'bc18a2e9-441f-433f-bd1f-ddb646758584'

抛出错误的行是ELSE tef.FieldValue END as FieldValue

2 个答案:

答案 0 :(得分:2)

你结束了一个CASE声明,忘了结束另一个声明。

更改此行:

ELSE tef.FieldValue END AS FieldValue

ELSE tef.FieldValue END END AS FieldValue

答案 1 :(得分:1)

从根本上说,没有理由有两个案例表达式

SELECT tef.TicketEntryId, tef.FieldName,
       (CASE WHEN TRY_CONVERT(UNIQUEIDENTIFIER, tef.FieldValue) IS NOT NULL 
             THEN lli.Name 
             WHEN tef.FieldDataType = 'BOOL' 
             THEN CAST(tef.FieldValue AS BIT)
             ELSE tef.FieldValue
        END) as FieldValue
FROM TicketEntry.TicketExtendedField tef LEFT JOIN
     RefList.LookupListItem lli
     ON CAST(lli.LookupListItemId AS VARCHAR(36)) = tef.FieldValue
WHERE tef.TicketEntryId = 'bc18a2e9-441f-433f-bd1f-ddb646758584';

那就是说,这个case或你的版本有打字问题。 case表达式返回单个值,具有单个类型。你为什么要投入一点价值?据推测,case的预期返回类型是varchar(),因此它永远不会返回bit值。但是,尝试转换可能会导致错误。