Я следую приведенному ниже подходу для выполнения операции Upsert. Проблема в том, что мне также нужно выполнить выбор, чтобы получить уникальный идентификатор, который должен использоваться в операторе вставки.
Кажется, что этот выбор должен быть в части USING прямо под строкой MERGe, однако я не могу найти способ работать с обоими (выбранный / предоставленный тип параметра)
текущий
CREATE PROCEDURE spUpsertEmployee @employee EmployeeType READONLY
AS
BEGIN
MERGE employee AS target_sqldb
USING @employee AS source_tblstg
ON (target_sqldb.employee_id = source_tblstg.RowKey)
WHEN MATCHED THEN
UPDATE SET
department = source_tblstg.PartitionKey,
first_name = source_tblstg.FirstName,
last_name = source_tblstg.LastName,
gender = source_tblstg.Gender,
role = source_tblstg.Role
WHEN NOT MATCHED THEN
INSERT (
employee_id,
department,
first_name,
last_name,
gender,
role
)
VALUES (
source_tblstg.RowKey,
source_tblstg.PartitionKey,
source_tblstg.FirstName,
source_tblstg.LastName,
source_tblstg.Gender,
source_tblstg.Role
);
END
желаемый
CREATE PROCEDURE spUpsertEmployee @employee EmployeeType READONLY
AS
BEGIN
MERGE employee AS target_sqldb
USING @employee AS source_tblstg
ON (target_sqldb.employee_id = source_tblstg.RowKey)
WHEN MATCHED THEN
UPDATE SET
department = source_tblstg.PartitionKey,
first_name = source_tblstg.FirstName,
last_name = source_tblstg.LastName,
gender = source_tblstg.Gender,
role = source_tblstg.Role
WHEN NOT MATCHED THEN
INSERT (
employee_id,
department,
id,
first_name,
last_name,
gender,
role
)
VALUES (
source_tblstg.RowKey,
source_tblstg.PartitionKey,
(SELECT TOP 1 ID FROM OTHER_TABLE),
source_tblstg.FirstName,
source_tblstg.LastName,
source_tblstg.Gender,
source_tblstg.Role
);
END