Я использую оператор MERGE, чтобы в основном выполнить UPSERT.Для строк, которых нет в месте назначения, я бы хотел, чтобы они были вставлены в определенном порядке.К сожалению, кажется, что предложение ORDER BY не поддерживается оператором слияния.Есть ли способ сделать это в одном утверждении?Смотрите пример для лучшего понимания того, что я пытаюсь сделать:
CREATE TABLE #destination (ident int not null identity(1,1), id int not null, value int not null)
INSERT INTO #destination (id,value) VALUES (1,50)
CREATE TABLE #source (id int not null, value int not null)
INSERT INTO #source (id,value) VALUES (1,100),(3,300),(2,200)
MERGE #destination d
USING #source s
ON d.id = s.id
WHEN MATCHED THEN
UPDATE
SET d.value = s.value
WHEN NOT MATCHED THEN
INSERT (id,value)
VALUES (s.id,s.value);
SELECT * FROM #destination ORDER BY ident
/*
WILL LIKELY SEE:
1, 1, 100
2, 3, 300
3, 2, 200
WANT TO ACHIEVE:
1, 1, 100
2, 2, 200
3, 3, 300
*/
Причина, по которой я хочу это сделать, заключается в том, что я хотел бы написать модульный тест для моего кода, который выполняет это слияние и хочу вставкидетерминированный порядок.Я знаю, что есть способы обойти это, но если есть способ заказать вставку MERGE, это будет проще всего.