Вставить данные с помощью InsertQuery на клиентской стороне с условием Not Exists
Добрый день!
Подскажите, пожалуйста, можно ли вставить данные запросом InsertQuery из JS, с условием что таких данных в таблице еще нет.
Нравится
Добрый день, Руслан.
Такого функционала в InsertQuery нет. Для решения вашей задачи можно использовать чтение с помощью EntitySchemaQuery, после добавлять в InsertQuery только те записи, которые не вернулись в ESQ.
Спасибо, Mykhailo! Подскажите, пожалуйста, планируется ли добавление такого функционала.
В планах реализации такой функциональности нет.
Не могли бы Вы уточнить, какую задачу хотите решить с помощью этого?
Возможно, Вам подойдет такой вариант:
У нас реализована функциональность Upsert: это UPDATE записи, но если такой записи в БД не нашлось, то произойдет ее INSERT (в терминологии БД этот метод называется MERGE). Вероятно Upsert - это то, что Вам нужно.
Для включения режима Upsert в UpdateQuery необходимо указать необязательный параметр запроса isUpsert и установить для него значение “true”. UpdateQuery в режиме upsert должен cодержать коллекцию значений всех колонок, которые нужны для добавления записи, а не только измененных на стороне источника данных, и использоваться только при обновлении одной записи. Пример запроса:
{
"rootSchemaName": "Contact",
"operationType": 2,
"includeProcessExecutionData": true,
"filters": {
"items": { "primaryColumnFilter": { "filterType": 1, "comparisonType": 3, "isEnabled": true, "trimDateTimeParameterToDate": false, "leftExpression": { "expressionType": 1, "functionType": 1, "macrosType": 34 }, "rightExpression": { "expressionType": 2, "parameter": { "dataValueType": 0, "value": "142d7ce5-cf51-40f6-a74a-945ce23299dc" } } } }, "logicalOperation": 0, "isEnabled": true, "filterType": 6 },
"columnValues": { "items": { "Name": { "expressionType": 2, "parameter": { "dataValueType": 1, "value": "test33" } } } },
"isForceUpdate": false,
"IsUpsert": true
}