我在sql server数据库中有以下关系:

假设我想对这个关系做一些修改。我想删除CPU_TYPE表,并在计算机表中添加一列“cpu”。
现在,我希望在sql server中使用'with‘子句来查询从两个表中连接的数据,并执行update语句来更新计算机表。
此sql server查询:
SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId,
CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
FROM COMPUTER LEFT OUTER JOIN
CPU_TYPE ON COMPUTER.cpuId = CPU_TYPE.cpuId结果如下:

现在,我将使用'with‘子句创建一个数据集,如下所示:
with ds as
(
SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId,
CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
FROM COMPUTER LEFT OUTER JOIN
CPU_TYPE ON COMPUTER.cpuId = CPU_TYPE.cpuId
)
update ds set cpu = name +', '+ cpuSpeed;结果如下:

查询已成功执行,但问题是计算机表没有更改!如何解决这个问题?
发布于 2014-03-24 16:53:24
你的密码没问题。你的数据被关闭了。CPUSpeed是NULL,所以连接的结果总是NULL。所以,使用coalesce()
with ds as (
SELECT COMPUTER.compID, COMPUTER.serialNo, COMPUTER.cpuId,
CPU_TYPE.name, CPU_TYPE.cpuSpeed, COMPUTER.cpu
FROM COMPUTER LEFT OUTER JOIN
CPU_TYPE
ON COMPUTER.cpuId = CPU_TYPE.cpuId
)
update ds
set cpu = name +', '+ coalesce(cpuSpeed, '');发布于 2014-03-24 16:48:59
只需尝试这个而不是使用CTE。
UPDATE COMPUTER
SET cpu = name + ', ' + cpuSpeed
FROM COMPUTER C1 LEFT OUTER JOIN
CPU_TYPE ON C1.cpuId = CPU_TYPE.cpuIdhttps://stackoverflow.com/questions/22615217
复制相似问题