Программа iNETsHOP - обработка, сравнение, анализ прайс листов поставщиков, создание каталога товаров интернет магазина Форум - Программа iNETsHOP - Работа с программой - Создание схемы импорта


http://inetshop.in.ua/index.php?p=showtopic&toid=281&fid=2&area=1&print_post=1617
05.01.2016 15:17

support


Support


Количество сообщений   1199
Зарегистрирован:   11-04-2008, 19:11:57
Чтение CSV средствами MS SQL
Прочитать CSV-файл средствами Microsoft SQL Server можно несколькими способами, самый простой через BULK INSERT. Например, если вы выполните в SQL Server Management studio следующий SQL-запрос, то он вернет вам набор данных из вашего файла CSV.

Код

IF not OBJECT_ID('tempdb..#TEMP_CSV') is null DROP TABLE #TEMP_CSV;
CREATE TABLE #TEMP_CSV
(
"code" varchar(1024),
"folder_id" varchar(1024),
"name" varchar(1024),
"size" varchar(1024),
"photo" varchar(1024),
"price" varchar(1024),
"url" varchar(1024),
"folder_alias" varchar(1024),
"folder_name" varchar(1024),
"manuftac" varchar(1024),
"attributes" varchar(1024),
"Стоимость" varchar(1024),
"Отображение времени" varchar(1024),
"Стиль" varchar(1024),
"Подсветка" varchar(1024),
"Противоударные" varchar(1024),
"Форма корпуса" varchar(1024),
"Цвет корпуса" varchar(1024),
"Материал браслета" varchar(1024),
"Цвет браслета/ремешка" varchar(1024),
"Цвет циферблата" varchar(1024),
"Цифры" varchar(1024),
"Стразы" varchar(1024),
"Говорящие" varchar(1024),
"Bluetooth" varchar(1024),
"Дополнительные функции" varchar(1024),
"Для дайвинга и туризма" varchar(1024),
"Тип механизма" varchar(1024),
"Ремешок/Браслет" varchar(1024),
"Материал корпуса" varchar(1024),
"Водозащита" varchar(1024),
"Стекло" varchar(1024),
"Ход" varchar(1024),
"Мелодия" varchar(1024),
"Сигнал" varchar(1024),
"Пол" varchar(1024),
"Страна-происхождения" varchar(1024)
);

BULK INSERT #TEMP_CSV
FROM 'C:\TEMP\92f3344e7c96c349cbf571f4564cb487.csv'
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n',
CODEPAGE = 'ACP'
);
SELECT * FROM #TEMP_CSV




Вам останется только перенести данные во временную таблицу #TMP_PRICE которая используется в программе для предварительного просмотра прайса.

В итоге, sql-запрос чтобы импортировать данный прайс-лист поставщика из CSV будет выглядеть так:

Код

DECLARE @FILENAME varchar(255);
SET @FILENAME = :FILENAME;
IF not OBJECT_ID('tempdb..#TEMP_CSV') is null DROP TABLE #TEMP_CSV;
CREATE TABLE #TEMP_CSV
(
"code" varchar(1024),
"folder_id" varchar(1024),
"name" varchar(1024),
"size" varchar(1024),
"photo" varchar(1024),
"price" varchar(1024),
"url" varchar(1024),
"folder_alias" varchar(1024),
"folder_name" varchar(1024),
"manuftac" varchar(1024),
"attributes" varchar(max),
"Стоимость" varchar(1024),
"Отображение времени" varchar(1024),
"Стиль" varchar(1024),
"Подсветка" varchar(1024),
"Противоударные" varchar(1024),
"Форма корпуса" varchar(1024),
"Цвет корпуса" varchar(1024),
"Материал браслета" varchar(1024),
"Цвет браслета/ремешка" varchar(1024),
"Цвет циферблата" varchar(1024),
"Цифры" varchar(1024),
"Стразы" varchar(1024),
"Говорящие" varchar(1024),
"Bluetooth" varchar(1024),
"Дополнительные функции" varchar(1024),
"Для дайвинга и туризма" varchar(1024),
"Тип механизма" varchar(1024),
"Ремешок/Браслет" varchar(1024),
"Материал корпуса" varchar(1024),
"Водозащита" varchar(1024),
"Стекло" varchar(1024),
"Ход" varchar(1024),
"Мелодия" varchar(1024),
"Сигнал" varchar(1024),
"Пол" varchar(1024),
"Страна-происхождения" varchar(1024)
);

EXEC('
BULK INSERT #TEMP_CSV
FROM '''+@FILENAME+'''
WITH
(
FIELDTERMINATOR = '';'',
ROWTERMINATOR = ''\n'',
CODEPAGE = ''ACP''
);
');
--SELECT * FROM #TEMP_CSV
INSERT INTO #TMP_PRICE ([NAME],[BRAND], [SID], [DESC_FULL], [PRICE], [CATEGORY], [URL])
SELECT "name", "manuftac", "code", "attributes", "price", "folder_name", "url"
FROM #TEMP_CSV
WHERE ISNUMERIC("code")=1 AND LTRIM(RTRIM(ISNULL("name", ''))) <> '';


Его нужно вставить в соответствующее поле схемы импорта.