如何检查外部表中的值是否与当前表不同,然后更新。
我正在从extstudent的名字更新学生名字。如果值不同,则只更新else不要更新
Update student
SET FirstName = FirstName
FROM ExtStudent
答案 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子句,因为如果它没有改变,它只会将它更新为相同的值。但请记住,这确实注册为更新,因此所有记录都会触发任何更新触发器......即使是那些没有更改的记录。
您可能遇到的另一个问题是您的名称字段是否可为空。如果其中一个字段为where
,null
子句将返回false,因此它不会更新。您可以使用isnull
函数解决此问题。
Where isnull(Student.FirstName,'') <> isnull(ExtStudent.FirstName,'')
如果使用此修改更改为左连接,则如果未找到匹配项,则会将FirstName
更新为NULL
。