关键字" AND"附近的语法不正确SQL Server Update / Case语句

时间:2014-05-30 21:02:02

标签: sql syntax case

使用多个联接和case语句处理更新查询。我一直收到错误“关键字'AND'附近的语法不正确。”

我已重新安排我的联接以避免子查询,但无法解决此问题。

代码:

UPDATE a
SET a.[FldrInit] = 
(CASE a.FldrInit
WHEN '889' AND d.GisCode LIKE 'HAP%' OR d.GisCode LIKE 'SAP%' THEN '889G1Pt'
WHEN '889' AND d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%' THEN '889G1Road'
WHEN '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN '889' AND d.gis LIKE 'R????' THEN '889ProxixRoad'
WHEN '883' THEN '883'
WHEN '885' THEN '885'
WHEN '886' THEN '886'
WHEN '887' THEN '887'
WHEN '900' THEN '900'
WHEN '902' THEN '902'
ELSE 'Other'
END)
FROM [dbo].[QCOrders_temp] as a 
INNER JOIN [dbo].[QCCloneOrders] as b 
ON b.NewOrdnum=a.OrdDte 
INNER JOIN [TOD].[dbo].[CurrentOrders] as c
ON c.Ordnum = b.OrigOrdnum
INNER JOIN [TOD].[dbo].[Addr] as d
ON d.RecNumAddr = c.RecNumAddr

WHERE a.FldrInit IS NULL

修改 @BhupeshC修复了错误,除了现在我得到一个新的 - “关键字'END'附近的语法不正确”。有什么想法吗?

UPDATE a
SET a.[FldrInit] = 
CASE 
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%' THEN '889G1Road'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'R????' THEN '889ProxixRoad'
WHEN a.FldrInit IN ('883', '885', '886', '887', '900', '902') THEN a.FldrInit
ELSE 'Other'
END
FROM [dbo].[QCOrders_temp] as a 
INNER JOIN [dbo].[QCCloneOrders] as b 
ON b.NewOrdnum=a.OrdDte 
INNER JOIN [TOD].[dbo].[CurrentOrders] as c
ON c.Ordnum = b.OrigOrdnum
INNER JOIN [TOD].[dbo].[Addr] as d
ON d.RecNumAddr = c.RecNumAddr

WHERE a.FldrInit IS NULL

1 个答案:

答案 0 :(得分:2)

使用以下内容修改CASE声明: -

CASE
WHEN a.FldrInit = '889' AND (d.GisCode LIKE 'HAP%' OR d.GisCode LIKE 'SAP%') THEN '889G1Pt'
WHEN a.FldrInit = '889' AND (d.GisCode LIKE 'HAS%' OR d.GisCode LIKE 'SAS%') THEN '889G1Road'
WHEN a.FldrInit = '889' AND d.GisCode LIKE 'A????' THEN '889ProxixPt'
WHEN a.FldrInit = '889' AND d.gis LIKE 'R????' THEN '889ProxixRoad'
WHEN a.FldrInit IN ('883','885','886', '887', '900', '902') THEN a.FldrInit
ELSE 'Other'
END

修改

错误的原因是 - 您的case语句有a.FldrInit作为进一步检查。因此,您无法在其他列上添加多个条件。所以你可以使用上面提到的语法。