我有一个场景,我必须根据Start_Month更新Customer表的Billing_Start_Month列。TSQL:使用case语句的奇怪行为
我已经在excel表格中给出了Start_Month值以及客户名称。为此,我创建了一个临时表并插入了所有CustomerName和Start_Month值。在Excel工作表中,Start_Month值还包含一些其他值,例如:(如果Start_Month是月份,如1月,2月等,则将Billing_Start_Month列更新为1,2,但如果Start_Month值包含1,3,4,5,7等值我们需要保留这些记录而不更新客户表的Billing_Start_Month列)。我们在Excel表格中只有5条记录,其中有Start_Month值,比如“1,3,4,5,7”。
现在,我使用下面的查询更新客户表中的列Billing_Start_Month:
UPDATE Customer
SET Billing_Start_Month = CASE WHEN tmp.StartMonth = 'January' THEN 1
WHEN tmp.StartMonth = ‘February’ THEN 2
END
FROM #temp tmp
INNER JOIN Customer c
ON tmp.Customer = c.acc_name
但在执行这个查询我正在检查约束失败的错误。当我从临时表中删除包含“1,3,4,5,7”的Start_Month值的记录时,上述查询成功执行。
Simillarly,如果我不删除含有“1,3,4,5,7”,从临时表START_MONTH值的记录,然后我必须包括另一个时的情况下,这样的部分,
CASE WHEN tmp.StartMonth = 'January' THEN 1
WHEN tmp.StartMonth = ‘February’ THEN 2
WHEN tmp.StartMonth = ‘1,3,4,5,7’ THEN 1235 –- any random value and not null
END
请帮我理解case语句的这种行为。我假设,当我在案例陈述中不包括案例'1,3,4,5,7'时,这5条记录在更新声明中不予考虑。
另外,你的一些引号似乎不是正确的('''!='''')。 –
此外,如果月份与两个选项中的任何一个都不匹配,您可能还需要包含“ELSE”条件。 –
Case语句迫使我在{tmp.StartMonth ='1,3,4,5,7'}时包含条件,否则检查约束被解雇 – PS078