在UPDATE CASE语句中选择

时间:2014-03-25 17:18:33

标签: sql-server tsql case

t-sql的新手,试图让以下Select语句起作用。任何想法?
干杯,
儒略

UPDATE DRPDATA  
SET DRPDATA.LocatieCode = CASE  
WHEN SUBSTRING([Org eenheid code],1,2) IN ('91','92','93') THEN 'BZ'  
ELSE (SELECT Huizen.IDHuis FROM DRPDATA INNER JOIN Huizen ON DRPDATA.Locatie = Huizen.NrHuis)  
END

3 个答案:

答案 0 :(得分:0)

看起来问题是子查询没有相关性,并且可能返回的值超过了允许的一个值。

您可以像这样移动连接

update d
set locatiecode = case when .... end
from drpdata d
join huizen h on ...

答案 1 :(得分:0)

检查以下查询

UPDATE DRPDATA  
SET LocatieCode = 
        CASE  
          WHEN SUBSTRING(a.[Org eenheid code],1,2) IN ('91','92','93') THEN 'BZ'  
          ELSE   b.IDHuis END
FROM DRPDATA a INNER JOIN Huizen b ON a.Locatie = b.NrHuis

答案 2 :(得分:0)

我会使用两个查询。如果您需要它们是原子的,请使用事务。你没有真正的理由在这里增加了很多复杂性。对于数据库引擎而言,作为单个语句运行也可能更复杂,因此两个语句可能表现更好。

UPDATE DRPDATA
SET DRPDATA.LocatieCode = 'BZ'
WHERE SUBSTRING([Org eenheid code],1,2) IN ('91','92','93');

UPDATE DRPDATA
SET DRPDATA.LocatieCode = Huizen.IDHuis
FROM DRPDATA
INNER JOIN Huizen 
    ON DRPDATA.Locatie = Huizen.NrHuis
WHERE SUBSTRING([Org eenheid code],1,2) NOT IN ('91','92','93');

请注意,WHERE子句使两个查询互斥,因此运行它们的顺序无关紧要。