I have ran into this problem a few times and I am wondering what other people are doing.
When I am creating a database, sometimes I have to import data into a table
Here is a SQL Server 2008 merge statement that I came up with to help me with my current situation:
MERGE INTO dbo.Sections as S -- Target
USING dbo.SectionsStaging as SS -- Source
ON S.Id = SS.Id -- Join
WHEN MATCHED THEN -- Record exists in both tables
UPDATE SET
TermCode = SS.TermCode,
CourseTitle = SS.CourseTitle,
CoursePrefix = SS.CoursePrefix,
CourseNumber = SS.CourseNumber,
SectionNumber = SS.SectionNumber,
Capacity = SS.Capacity,
Campus = SS.Campus,
FacultyFirstName = SS.FacultyFirstName,
FacultyLastName = SS.FacultyLastName,
[Status] = SS.[Status],
Enrollment = SS.Enrollment
WHEN NOT MATCHED THEN -- Record exists only in source table
INSERT ([Id],[TermCode],[CourseTitle],[CoursePrefix],[CourseNumber],[SectionNumber],[Capacity],[Campus],[FacultyFirstName],[FacultyLastName],[Status],[Enrollment])
VALUES (SS.[Id],SS.[TermCode],SS.[CourseTitle],SS.[CoursePrefix],SS.[CourseNumber],SS.[SectionNumber],SS.[Capacity],SS.[Campus],SS.[FacultyFirstName],SS.[FacultyLastName],SS.[Status],SS.[Enrollment])
WHEN NOT MATCHED BY SOURCE THEN -- Record exists only in target table
DELETE;
Good stuff!