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
答案 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
子句使两个查询互斥,因此运行它们的顺序无关紧要。