我收到此错误:
关键字' 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
。
答案 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
值。但是,尝试转换可能会导致错误。