У меня есть таблица с именем 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
, но он выдает ошибку. Как я могу решить эту проблему?