|
|
|
Valued Member
      
Group: General Forum Members
Last Login: Wednesday, December 05, 2012 11:31 AM
Points: 74,
Visits: 164
|
|
I have a table sectioninstructor Sectionid, Instructorid, Instructorrole ----------------------------------------------------------------------- Instructorrole (1 for primary instructor, 2 for secondary instructor)
Note I want to make sure that each section has only one primary instructor i.e. if the new instructor is assigned primary role and there is already a record in the table that has the same sectionid and instructorrole =1 on inserting the new record I should change the instructorrole to 2 I will receive (a list of sectionids), instructorid, roleid I need to merge this list with the table sectioninstructor
I tried another way but I got an error message matched can’t have two updates ALTER PROCEDURE [dbo].[usp_SectionInstructor_InsertList] ( @SectionList nvarchar(1000), @RoleID int,--(1 for primary and 2 for secondary) @InstructorID int ) AS begin select T.items as SectionID, @InstructorID as instructorID, @RoleID as InstructorROle from dbo.fn_SP2_Split(@SectionList,',') T as Source on Target.SectionID=source.SectionID and Target.InstructorID=Source.SectionID when Matched then update set Target.InstructorRole=@RoleID, Target.updatedby=@updatedby when not matched then insert (SectionID, InstructorID, InstructorRole ) values (Source.SectionID, Source.InstructorID, @RoleID );
---the function
--splits a list to CREATE FUNCTION [dbo].[fn_SP2_Split] (@String nvarchar(max), @Delimiter nchar(1) ) returns @temptable TABLE (items nvarchar(max)) as begin declare @idx int declare @slice nvarchar(250) select @idx = 1 if len(@String)<1 or @String is null return while @idx!= 0 begin set @idx = charindex(@Delimiter,@String) if @idx!=0 set @slice = left(@String,@idx - 1) else set @slice = @String if(len(@slice)>0) insert into @temptable(Items) values(@slice) set @String = right(@String,len(@String) - @idx) if len(@String) = 0 break end return end
|
|
|
|
|
Hall of Fame
       
Group: General Forum Members
Last Login: Yesterday @ 3:48 AM
Points: 3,125,
Visits: 4,311
|
|
The error in the MERGE statement is encountered when one row in the target table will be addressed by more than one row in the source data set. This imples either that the matching criterium is incorrect, or there is more than one update per record in the source dataset.
____________________________________________ Space, the final frontier? not any more... All limits henceforth are self-imposed. “libera tute vulgaris ex”
|
|
|
|