Пример недавней процедуры, которую я написал для обновления существующей строки или вставки новой строки.Таблица имеет ту же структуру, что и MembershipEmailFormat табличной переменной.
Обнаружено, что проще всего создать переменную таблицы, которая будет источником в предложении Using.Я понимаю, что главная цель операторов Merge - объединение нескольких строк между двумя таблицами.Мой вариант использования заключается в том, что мне нужно вставить новый адрес электронной почты для пользователя или изменить существующий адрес электронной почты.
CREATE PROCEDURE [dbo].[usp_user_merge_emailformat]
@UserID UNIQUEIDENTIFIER,
@Email varchar(256),
@UseHTML bit
AS
BEGIN
--SELECT @UserID='04EFF187-AEAC-408E-9FA8-284B31890FBD',
-- @Email='person@xxxx.com',
-- @UseHTML=0
DECLARE @temp TABLE
(
UserID UNIQUEIDENTIFIER,
Email varchar(256),
HtmlFormat bit
)
INSERT INTO @temp(UserID,Email, HtmlFormat)
Values(@UserID,@Email,@UseHTML)
SELECT * FROM @temp
MERGE dbo.MembershipEmailFormat as t
USING @temp AS s
ON (t.UserID = s.UserID and t.Email = s.Email)
WHEN MATCHED THEN UPDATE SET t.HtmlFormat = s.HtmlFormat
WHEN NOT MATCHED THEN INSERT VALUES(s.UserID,s.Email,s.HtmlFormat);
END