Я пишу запрос для импорта данных из одной таблицы в новую таблицу.Мне нужно вставить записи, которые не существуют в новой таблице, и обновить записи, которые существуют.Я пытаюсь использовать MERGE "upsert" метод.
У меня есть некоторые уникальные проблемы из-за клиентской базы данных и структуры приложения.Таблица, в которую я вставляю, имеет поле уникального идентификатора, которое увеличивается на 1 для каждой новой строки, но таблица не выполняет автоматическое увеличение;оператор вставки должен получить самый высокий идентификатор в целевой таблице и добавить 1 для новой записи.
Из моего исследования я не могу понять, как это сделать с помощью MERGE.Я не базы данных разрешений на создание последовательности.Я пробовал много вещей, но в настоящее время мой запрос выглядит так:
MERGE
dbo.targetTable as target
USING
dbo.sourceTable AS source
ON
target.account_no = source.account_ID
WHEN NOT MATCHED THEN
INSERT (
ID,
FIELD1,
FIELD2,
FIELD3
) VALUES (
(SELECT MAX(ID) + 1 FROM dbo.targetTable),
'field1',
'field2',
'field3'
)
Проблема, с которой я затем сталкиваюсь с этим кодом, заключается в том, что он, кажется, только один раз запускает оператор выбора для нового идентификатора.То есть, если максимальный идентификатор в целевой таблице равен 10, он будет вставлять каждую новую запись с идентификатором 11. Это не сработает, поскольку я получаю ошибку Violation of PRIMARY KEY constraint. Cannot insert duplicate key in object
.Я много гуглял и пробовал разные вещи, но не смог понять это.Спасибо за любую помощь, спасибо.
РЕДАКТИРОВАТЬ: Для пояснения, столбец уникальный идентификатор не заполняется автоматически.Если я не вставлю значение для столбца ID, я получу Cannot insert the value NULL into column 'ID', table 'dbo.targetTable'; column does not allow nulls. UPDATE fails.
И снова, как я уже говорил, у меня нет прав на создание последовательностей.Он просто выдает ошибку и говорит, что у меня нет разрешения на это.
Я согласен, что автоматическое изменение столбца ID на автоматическое увеличение было бы идеальным, но у меня нет возможности изменять таблицу, напримерчто либо.