It seems that (at least) one of the MERGE statements has a poor join condition in the USING clause.
A row in the target should be matched by at most one row in the source, and ideally this should clear from that you are joining on keys. If there can be multiple matches, SQL Server calls this an error, rather than just picking one.
Here is a simple example which you can tell is flawed, and indeed produces this error.
CREATE TABLE target (a int NOT NULL PRIMARY KEY, data varchar(18) NOT NULL) go INSERT target (a, data) VALUES(1, 'Data') go CREATE TABLE source (a int NOT NULL, b int NOT NULL, data varchar(18) NOT NULL, PRIMARY KEY(a, b) ) INSERT source (a, b, data) VALUES(1, 1, 'New data'), (1, 2, 'Newer data'), (1, 3, 'Newest data') go MERGE target t USING source s ON t.a = s.a WHEN NOT MATCHED THEN INSERT (a, data) VALUES(s.a, s.data) WHEN MATCHED THEN UPDATE SET data = s.data ; go DROP TABLE target, source