2

В таблице Target находится столбец PK usr_cd, который не существует в исходной таблице. Следовательно, при вставке из Source to Target я хочу создать уникальный код. Как я могу достичь этого, когда я использую оператор MERGE?Как создать уникальный код в INSERT внутри MERGE?

Эти опции судимым без везения: объект

  1. Последовательность: Невозможно использовать внутри MERGE.
  2. SP вызов: невозможно выполнить SP внутри MERGE в INSERT.
  3. Вызов функции: не поможет, поскольку я не могу использовать объект последовательности внутри UDF. Кроме того, если я храню уникальное значение в таблице, я не буду обновлять внутри UDF.
  4. Добавление кода в исходную таблицу: не может использоваться, поскольку некоторые записи будут обновлены, а некоторые будут вставлены, следовательно, он сломает последовательность.

Добавление таблицы по умолчанию в Target является одним из вариантов, но я хочу этого избежать.

Дайте мне знать, если есть какой-либо другой способ достижения этого при использовании MERGE.

+1

Я не понимаю. Почему бы просто не использовать столбец идентификатора? Это лучшее решение подобных проблем. –

+0

@ ZoharPeled Я не могу использовать идентификатор, поскольку мне нужно отслеживать эти вставленные записи отдельно. –

ответ

3

Действительно, документы для NEXT VALUE FOR сказать:

Ограничения и ограничения

NEXT VALUE FOR функция не может использоваться в следующих ситуациях:

В MERGE заявлении. (За исключением, когда функция NEXT VALUE FOR является используется в ограничении по умолчанию в таблице назначения и по умолчанию используется в CREATE утверждении MERGE заявления.)

Так что, если вы не хотите использовать в качестве NEXT VALUE FOR ограничение по умолчанию в определении целевой таблицы или просто IDENTITY, единственное, что я могу придумать, - это триггер. Выключатель INSTEAD OF INSERT.

+0

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

+0

@RajeshBhat, да, используя отдельные 'INSERT' и' UPDATE', определенно вариант. –