ОБЪЕДИНЕНИЕ: несколько утверждений, КОГДА НЕ СООТВЕТСТВУЮТ?

Можно ли написать несколько операторов, когда НЕ СООТВЕТСТВУЮТ?

MERGE <target_table> [AS TARGET]
USING <table_source> [AS SOURCE]
ON <search_condition>
WHEN MATCHED THEN
<merge_matched>                      
WHEN NOT MATCHED THEN
<merge_not_matched>              -- ONE MORE INSERT STATEMENT ON OTHER TABLE

Use of BEGIN and END not working

Нет, у вас не может быть BEGIN / END внутри слияния. Но вы можете использовать ВСТАВИТЬ НАД DML для вставки дополнительной записи в таблицу, которая не является частью источника / цели.

Lukasz Szozda 13.09.2018 16:32

Я не верю, что MERGE позволит вам выполнять несколько операций.

Shawn 13.09.2018 16:32

Вы можете просто написать отдельные инструкции, используя exists. Это также имело бы то преимущество, что вам не пришлось бы иметь дело с опасностями слияния, потому что их много, серьезность зависит от версии sql.

www.StudioSQL.nl 13.09.2018 16:39

@LukaszSzozda Это довольно крутой способ обойти это «ограничение» в MERGE, но разве это не идет вразрез с намерением MERGE? Если бы он был предназначен для выполнения нескольких операций, он позволил бы вам, по крайней мере, выполнить sproc. Но я тоже не думаю, что это позволяет вам это делать.

Shawn 13.09.2018 16:40

@Shawn INSERT OVER DML - это просто расширение OUTPUT INTO clause. С простым OUTPUT вы не можете контролировать, какие строки попадут во вторую таблицу. Используя OUTPUT и обернув все слияние подзапросом, вы можете добавить фильтры / присоединиться к другой вкладке и так далее.

Lukasz Szozda 13.09.2018 16:44

@LukaszSzozda Я понимаю, что он делает, и считаю, что это довольно круто. Я просто не уверен, для чего был предназначен MERGE. Может быть более надежный способ выполнить апсерт в несколько таблиц. Особенно учитывая, что MERGE может столкнуться с проблемами с блокировкой и резервным копированием. И особенно для тех, кто все еще использует <SQL2016. Это определенно то, на что мне стоит посмотреть и поиграть.

Shawn 13.09.2018 17:52

@Shawn Да, это было предназначено для этого демонстрация: A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statementthat is not the immediate source of rows for an INSERT statement.

Lukasz Szozda 14.09.2018 20:28
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
7
198
0

Другие вопросы по теме