Я хочу добавить значение элемента массива "FruitNameInventory" в столбец "MatchInventory".Указание инвентарных соответствий.
Это всего лишь вопрос выбора соответствующей записи и обработки конкатенации строк.
Попробуйте:
UPDATE
FRUITORDERDB
SET MatchInventory =
CASE
WHEN MatchInventory IS NULL THEN ?
ELSE CONCAT(MatchInventory, ',', ?)
END
WHERE FruitOrder LIKE CONCAT('%', ?, '%')
Где знак вопросаобозначает значение, которое берется из вашей переменной Powershell.
CONCAT()
и CASE
- это стандартные ключевые слова ANSI SQL, которые поддерживаются большинством СУБД (когда они недоступны, обычно есть идентичные функции, специфичные для поставщика).
Также было бы неплохо убедиться, что значение, добавляемое в столбец, еще не существует (например, если вы выполняете запрос несколько раз), для этого вы можете изменить предложение WHERE
.:
WHERE
FruitOrder LIKE CONCAT('%', ?, '%')
AND MatchInventory NOT LIKE CONCAT('%', ?, '%')
Кроме того, позвольте мне предложить альтернативный способ обеспечения того, чтобы строка была частью списка CSV:
WHERE CONCAT(',', FruitOrder, ',') LIKE CONCAT('%,', ?, ',%')
Хотя это выражение и менее эффективно, оно является более безопасным в смыслечто он обеспечивает совпадение слова full (например, он будет правильно обрабатывать случай, когда поле CSV содержит что-то вроде 'test,testing'
и вы ищете 'test'
наLY).