CREATE PROCEDURE [dbo].[CollectionUser_UpdateUsers] @CollectionId UNIQUEIDENTIFIER, @Users AS [dbo].[SelectionReadOnlyArray] READONLY AS BEGIN SET NOCOUNT ON DECLARE @OrgId UNIQUEIDENTIFIER = ( SELECT TOP 1 [OrganizationId] FROM [dbo].[Collection] WHERE [Id] = @CollectionId ) ;WITH [AvailableUsersCTE] AS( SELECT Id FROM [dbo].[OrganizationUser] WHERE OrganizationId = @OrgId ) MERGE [dbo].[CollectionUser] AS [Target] USING @Users AS [Source] ON [Target].[CollectionId] = @CollectionId AND [Target].[OrganizationUserId] = [Source].[Id] WHEN NOT MATCHED BY TARGET AND [Source].[Id] IN (SELECT [Id] FROM [AvailableUsersCTE]) THEN INSERT VALUES ( @CollectionId, [Source].[Id], [Source].[ReadOnly] ) WHEN MATCHED AND [Target].[ReadOnly] != [Source].[ReadOnly] THEN UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly] WHEN NOT MATCHED BY SOURCE AND [Target].[CollectionId] = @CollectionId THEN DELETE ; EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @CollectionId, @OrgId END