如何检查外部表中的值是否与当前表不同然后更新

时间:2015-11-04 21:47:19

标签: sql-server

如何检查外部表中的值是否与当前表不同,然后更新。

我正在从extstudent的名字更新学生名字。如果值不同,则只更新else不要更新

Update student
SET FirstName = FirstName
FROM ExtStudent

1 个答案:

答案 0 :(得分:1)

您需要在UPDATE (Transact-SQL)语句中加入这两个表,以便比较这两个表。两个表都必须具有相同的密钥,以便您可以将表中的记录与“外部”表匹配。在下面的示例中,我将假设两个表的主键都是名为StudentId的字段。

Update Student
SET Student.FirstName = ExtStudent.FirstName
FROM Student
JOIN ExtStudent
ON Student.StudentID = ExtStudent.StudentID
Where Student.FirstName <> ExtStudent.FirstName

这将更新Student表,并将FirstName字段设置为StudentID表中ExtStudent字段中FirstName的{​​{1}}匹配记录不符合。因为这是一个内连接,所以如果找不到匹配的记录,它将不会更新。

如果要更新多个字段并想要更改记录(如果有任何字段更改),请检查where子句中每个字段的不等式,并用OR分隔。

从技术上讲,你可以不使用where子句,因为如果它没有改变,它只会将它更新为相同的值。但请记住,这确实注册为更新,因此所有记录都会触发任何更新触发器......即使是那些没有更改的记录。

您可能遇到的另一个问题是您的名称字段是否可为空。如果其中一个字段为wherenull子句将返回false,因此它不会更新。您可以使用isnull函数解决此问题。

Where isnull(Student.FirstName,'') <> isnull(ExtStudent.FirstName,'')

如果使用此修改更改为左连接,则如果未找到匹配项,则会将FirstName更新为NULL