我一直在构建一个相当简单的更新语句,其中包含一个嵌套的case语句来确定更新值。列描述与nvarchar(32)相同。对于这两个字段。
下面的代码
UPDATE TableA t
SET t.Last_Col =
( CASE WHEN t.First_Col = 'ItemOne'
THEN 'anItemOne'
WHEN t.First_Col = 'ItemTwo'
THEN CASE WHEN t.Second_Col = 'ItemTwo_A'
THEN 'aSecondItem_A'
ELSE 'aSecondItem'
END
ELSE 'NoItem'
END
);
该代码有效但当我尝试使用t.First_Col代替字符串'NoItem'时,我得到字符集不匹配。
ELSE t.First_Col
END
);
不起作用。 t.First_Col和t.Last_Col都是nvarchar2(32)并且我一直在尝试使用我认为不应该需要的演员。
ELSE CAST(t.First_Col AS NVARCHAR2(32))
END );
非常感谢任何提示或建议。 一如既往地感谢。
答案 0 :(得分:5)
case语句的类型由其中的第一个子句决定。在这种情况下,第一个子句是varchar字符串而不是nvarchar。
试试这个:
UPDATE TableA t
SET t.Last_Col = (CASE WHEN t.First_Col = N'ItemOne'
THEN N'anItemOne'
WHEN t.First_Col = N'ItemTwo'
THEN (CASE WHEN t.Second_Col = N'ItemTwo_A'
THEN N'aSecondItem_A'
ELSE N'aSecondItem'
END)
ELSE N'NoItem'
END );
答案 1 :(得分:1)
看起来字符集不匹配是CASE语句返回的选项之间的。
'anItemOne' varchar
'aSecondItem_A' varchar
'aSecondItem' varchar
'NoItem' varchar
'anItemOne' varchar
'aSecondItem_A' varchar
'aSecondItem' varchar
t.First_Col nvarchar
尝试制作返回选项nvarchar
s(即N'anItemOne'
)然后t.First_Col
就可以了。
N'anItemOne' nvarchar
N'aSecondItem_A' nvarchar
N'aSecondItem' nvarchar
t.First_Col nvarchar