使用SQL Server 2008,我有一个表People
,其中包含列:
Name | City | Born | ...
另一个表Change
,其中包含列:
OldName | NewName
现在,我想更改表Name
中的People
:如果表OldName
中的Change
与Name
相同在People
中,然后将Name
中的People
更改为NewName
中的Change
。
任何简单的方法?
哦,还有另外一个问题:如果Name
中的People
是主键(或者说Name
而City
是复合键),更改名称要困难得多吗? THX
答案 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