Вопрос

Вставить данные с помощью InsertQuery на клиентской стороне с условием Not Exists

Добрый день!

Подскажите, пожалуйста, можно ли вставить данные запросом InsertQuery из JS, с условием что таких данных в таблице еще нет.

 

Нравится

3 комментария

Добрый день, Руслан.



Такого функционала в 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

}

Показать все комментарии