Как использовать два запроса внутри оператора слияния - PullRequest
1 голос
/ 21 июня 2020

У меня есть таблица с именем product и ее данные следующим образом:

| ProductID | ProductName | Code | SortValue |
+-----------+-------------+------+-----------+
| 10        | AAA         | 13RT | 1         |
| 11        | BBB         | 14RT | 2         |
| 12        | CCC         | 15RT | 3         |
| 13        | DDD         | 16RT | 4         |
| 14        | EEE         | 17RT | 5         |
| 15        | FFF         | 19RT | 6         |

Я написал запрос на слияние, чтобы вставить данные продукта следующим образом:

MERGE [product] AS target 
USING (SELECT @productName, @code) AS source (productname, code) 
      ON (target.code = source.code) 

WHEN matched THEN 
     UPDATE 
         SET productname = source.productname, 
             code = source.code,

WHEN NOT matched THEN 
     INSERT (productname, code, sortvalue) 
     VALUES (source.productname, source.code, 1) 

OUTPUT inserted.productid INTO @insertedTable; 

Вы можете видеть в таблице продуктов есть столбец SortValue, и каждый продукт имеет значение сортировки. Мне нужно вставить недавно вставленное значение сортировки продукта как 1, и мне нужно обновить значение сортировки существующего продукта на единицу. Для этого я написал следующий запрос.

UPDATE product
SET SortValue = sortvalue + 1
WHERE sortvalue >= 1;

Мне нужно выполнить указанный выше запрос перед вставкой новых записей. Как я могу это сделать, я применяю его после части оператора слияния NOT matched, но он выдает ошибку. Как я могу решить эту проблему?

...