Ausdruck des nicht-booleschen Typs, der beim Zusammenführen angegeben ist?

Ich habe den folgenden Code, um eine gespeicherte Prozedur zu erstellen, aber ich scheine, eine Menge Fehler unterhalb dieser Zeile zu erhalten:

ON (Target.Email = Source.Email AND Target.PromoName = Source.PromoName) 

Der Fehler auf dieser Zeile ist "Ausdruck des nicht-booleschen Typs spezifiziert". Was mache ich hier falsch?

 CREATE PROCEDURE [dbo].InsertUpdateBasicPromoEntry @Email nvarchar(100) ,@PromoName varchar(100) ,@MaxEntries tinyint AS BEGIN SET NOCOUNT ON; MERGE [dbo].[BasicCodePromoEntries] AS Target USING ( SELECT @Email as Email ,@PromoName as PromoName ) AS Source ON (Target.Email = Source.Email AND Target.PromoName = Source.PromoName) WHEN MATCHED THEN BEGIN IF Target.PeriodExpires < GETDATE() BEGIN UPDATE SET Target.PeriodExpires = GETDATE() ,Target.PeriodEntries = 1 END ELSE IF Target.PeriodExpires > GETDATE() AND Target.PeriodEntries < @MaxEntries BEGIN UPDATE SET Target.PeriodEntries = Target.PeriodEntries + 1 END ELSE BEGIN RETURN 1 END RETURN 0 END WHEN NOT MATCHED BY Target THEN BEGIN INSERT INTO Target (Email, PromoName, PeriodEntries, PeriodExpires) VALUES (@Email, @PromoName, 1, DATEADD(day, 1, GETDATE())) RETURN 0 END END 

PS: Jeder BEGIN und END ist unterstrichen und sagt, falsche Syntax in der Nähe …