0

玩弄 SQL Server 2008,我有一个People包含列的表:

Name  | City |  Born | ...

和另一个Change带有列的表:

OldName  |  NewName

现在我想Name在表中进行如下更改People:如果OldNameChange中与Namein相同,则将inPeople更改为Namein 。PeopleNewNameChange

有什么简单的方法吗?

哦,还有一个问题:如果NameinPeople是主键(或者说是复合键) NameCity更改名称会更难吗?谢谢

4

2 回答 2

1

答案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 来测试它,但根据在线示例,它应该可以工作。

/编辑

Answer2)只要您仍然保持密钥的唯一性,就不会很难改变。一旦你引起碰撞,你就会得到一个错误。出于这个原因,最好在您的 PK 中拥有一个自动递增的 ID 字段

于 2012-08-07T23:21:46.547 回答
1

您最好向表中添加一PeopleId列,并将表中的列People替换为与表具有外键关系的列:OldNameChangePeopleIdPeople

人们:

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

改变:

PeopleId | NewName
----------------------
1        | Barney
于 2012-08-07T23:24:44.493 回答