Я хочу использовать оператор слияния для обновления таблицы PersonalDetails с помощью таблицы STG2PersonalDetails. Я хочу, чтобы он обновлял Target, если Source присутствует на PersonalID. Я хочу, чтобы он вставлялся в Target, если Source отсутствует в целевом сопоставлении на PersonalID. Последнее, я хочу удалить из Target, если PersonalID отсутствует в исходной таблице. Это код, который я сгенерировал, но его не работает для удаления. Думаю, мне может понадобиться добавить немного дополнительного скрипта здесь, но я не уверен ..... Удивительно, может ли кто-нибудь помочь.Заявление о слиянии в SQL, не работающем для удаления в Target
BEGIN TRAN;
MERGE [dbo].[PersonalDetails] AS T
USING dbo.[STG2PersonalDetails] AS S
ON (T.[PersonalID] = S.[PersonalID])
WHEN NOT MATCHED BY TARGET
THEN INSERT([PersonalID]
,[UserName]
,[Title]
,[Forename]
,[PreferredName]
,[Surname]
,[Postnominal]
,[Degree]
,[Email]
,[Phone]
,[UserID]
,[UserType]
,[LeaveDate]
,[Active]
,[ProfileStatus]
,[ProfileStatusID])
VALUES([PersonalID]
,[UserName]
,[Title]
,[Forename]
,[PreferredName]
,[Surname]
,[Postnominal]
,[Degree]
,[Email]
,[Phone]
,[UserID]
,[UserType]
,[LeaveDate]
,[Active]
,[ProfileStatus]
,[ProfileStatusID])
WHEN MATCHED
THEN UPDATE SET
T.[PersonalID] =S.[PersonalID],
T.[UserName] =S.[UserName],
T.[Title] =S.[Title],
T.[Forename] =S.[Forename],
T.[PreferredName] =S.[PreferredName],
T.[Surname] =S.[Surname],
T.[Postnominal] =S.[Postnominal],
T.[Degree] =S.[Degree],
T.[Email] =S.[Email],
T.[Phone] =S.[Phone],
T.[UserID] =S.[UserID],
T.[UserType] =S.[UserType],
T.[LeaveDate] =S.[LeaveDate],
T.[Active] =S.[Active]
WHEN NOT MATCHED BY SOURCE
THEN DELETE
OUTPUT $action, inserted.*, deleted.*;
ROLLBACK TRAN;
GO
Я не использую Talend, я использую SSMS –
Таким образом, вы в значительной степени требуется таблица PersonalDetails иметь точно такое же содержание, что и таблица STG2PersonalDetails? –