Загрузить содержимое CSV в качестве новой максимальной позиции на складе в Exact Online
Я хочу загрузить содержимое файла CSV в виде новых значений в наборе данных Exact Online, используя, например, следующую инструкцию SQL:
update exactonlinerest..ItemWarehouses
set maximumstock=0
where id='06071a98-7c74-4c26-9dbe-1d422f533246'
and maximumstock != 0
Я могу получить содержимое файла, используя:
select *
from files('C:\path\SQLScripts', '*.csv', true)@os fle
join read_file_text(fle.file_path)@os
Но кажется, что невозможно изменить многострочный текст в file_contents
поле для разделения строк или записей.
Как я могу разделить file_contents
поле в несколько строк (например, используя 'update ...' || VALUE
а потом прогоняет @@mydump.sql
или напрямую используя insert into / update
заявление)?
1 ответ
На данный момент я смог решить ее с помощью регулярных выражений, а затем загрузить сгенерированный оператор SQL в механизм SQL следующим образом:
select regexp_replace(rft.file_contents, '^([^,]*),([^,]*)(|,.*)$', 'update exactonlinerest..ItemWarehouses set maximumstock = $1 where code = $2 and maximumstock != $1;' || chr(13), 1, 0, 'm') stmts
, 'dump2.sql' filename
from files('C:\path\SQLScripts', '*.csv', true)@os fle
join read_file_text(fle.file_path)@os rft
local export documents in stmts to "c:\path\sqlscripts" filename column filename
@c:\hantex\path\dump2.sql
Тем не менее, это подвержено ошибкам, когда у меня есть одна цитата в коде статьи.