Команда SQL Server MERGE - как перехватить, если ничего не определено - PullRequest
0 голосов
/ 13 декабря 2010

С помощью этой команды мы можем указать что-то вроде:

WHEN MATCHED AND stm.StudentMarks > 250 THEN DELETE

Но как нам ловить, если запись не не соответствует? Например, скажем, stm.StudentMarks = 100? Я получаю синтаксическую ошибку, если я пытаюсь "ELSE".

Я знаю, что эта команда обычно не используется таким образом. Но если он сможет это сделать, это избавит меня от необходимости использовать транзакцию, блокировки и несколько операторов SQL.

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Попробуйте:

WHEN NOT MATCHED ....... THEN ......

, чтобы найти те строки в источнике, которые не имеют эквивалента в целевом объекте (на основе указанного условия ON ....), или в противном случае вам нужно указать больше/ другие выражения, например

WHEN MATCHED AND stm.StudentMarks <= 250 THEN .....
0 голосов
/ 05 мая 2011

Используйте секунду

WHEN MATCHED THEN 

без каких-либо дополнительных условий, он сработает только один, когда предложение, и так как первый получает все, что соответствует условию, второй получит только те, которые соответствуют всем, кроме условия.

0 голосов
/ 23 декабря 2010

Основываясь на дальнейшем изучении, я пришел к выводу, что способ сделать это - использовать представления / TVF для получения правильного набора данных. Один мог получить записи, соответствующие «IF ... THEN ...», а другой мог получить записи, соответствующие ELSE. Было бы просто запустить два оператора MERGE, что не составляет особого труда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...