SQL Server - 如果存在于其他表中,则更改列?

时间:2012-08-07 23:16:50

标签: sql sql-server-2008

使用SQL Server 2008,我有一个表People,其中包含列:

Name  | City |  Born | ...

另一个表Change,其中包含列:

OldName  |  NewName

现在,我想更改表Name中的People:如果表OldName中的ChangeName相同在People中,然后将Name中的People更改为NewName中的Change

任何简单的方法?

哦,还有另外一个问题:如果Name中的People是主键(或者说NameCity是复合键),更改名称要困难得多吗? THX

2 个答案:

答案 0 :(得分:1)

正确答案为)

UPDATE people,change
SET people.name = change.newname
WHERE people.name = change.oldName
使用内部联接语法

编辑

UPDATE people
SET people.name = change.newName
FROM people
INNER JOIN change ON people.name = change.oldName

我没有SQL Server来测试它,但基于在线示例,它应该可以工作。

<强> /修改

答案2)只要你仍然保持钥匙的独特性,就不会有任何变化。一旦发生碰撞,就会出现错误。出于这个原因,最好在人们中使用自动递增ID字段作为你的PK

答案 1 :(得分:1)

最好在PeopleId表格中添加People列,并将OldName表格中的Change列替换为PeopleId具有返回People表的外键关系的列:

人:

PeopleId | Name   | City     | Born
-------------------------------------------
1        | Fred   | New York | 1/1/1980
2        | Wilma  | Boston   | 1/1/1980

变化:

PeopleId | NewName
----------------------
1        | Barney