Как добавить два CSV (заголовок и контент отдельно) в SQL Server? - PullRequest
0 голосов
/ 08 ноября 2018

Я получил необработанные данные из SAP, которые мне нужно добавить в одну локальную базу данных. У меня проблема в том, что я получил два отдельных набора данных на таблицу.

  • Один заголовочный файл (описывающий имя, тип, первичный ключ, не ноль)
  • Файл фактических данных (ввод в строки, определенные в заголовочном файле)

Я могу добавить их только в виде плоского файла, насколько я смог исследовать (и опробовать), и это означает, что я могу добавить только один из этих файлов. Либо полностью отсутствует заголовок, либо отсутствуют входные данные.

Объединение их вручную в одном файле CSV означало бы потерю всей дополнительной информации (Тип, Первичный ключ, Не ноль и т. Д.), Верно?

Есть идеи, как мне поступить?

Спасибо за помощь.

Рад узнать что-то новое здесь.

Пример заголовка:

+-------------------------------+
|             Col1              |
+-------------------------------+
| TABNAME CHAR 000030 000000    |
| DDLANGUAGE LANG 000001 000000 |
| ...                           |
+-------------------------------+

Пример данных:

+------+-------+------+------+-----+
| Col1 | Col2  | Col3 | Col4 | ... |
+------+-------+------+------+-----+
| LFB1 | ZBOKD | A    | ...  | ... |
| ...  | ...   | ...  | ...  | ... |
+------+-------+------+------+-----+

Объединены они хотели бы это (и если я не ошибаюсь, они должны выглядеть так):

+---------+------------+-----+-----+
| TABNAME | DDLANGUAGE | ... | ... |
+---------+------------+-----+-----+
| LFB1    | ZBOKD      | A   | ... |
| ...     | ...        | ... | ... |
+---------+------------+-----+-----+

1 Ответ

0 голосов
/ 08 ноября 2018

Вы захотите CREATE TABLE, а затем BULK INSERT в него.

  • Откройте файл заголовка и определите, какие имена столбцов и типы данных
  • Создайте свою таблицу в SQL Server на основе информации в заголовочном файле
  • Массовая вставка файла данных в вашу таблицу

Даже если заголовок и данные были в одном файле, вы бы проигнорировали первую строку, поскольку она не содержит данных.

create table myTable (Col1 <datatype>, Col2 <datatype>, ...)
go

bulk insert myTable
from 'c:\somedirectory\somefile.csv'
   with(
        FIRSTROW = 1
        ,FIELDTERMINATOR = ','
        ,ROWTERMINATOR = '\n'
        ,ERRORFILE = 'c:\someDir\yourErrorFile')

Файлы , разделенные запятыми, могут быть проблемой , в первую очередь, если любое значение в любом столбце может содержать запятую. В этом случае SQL Server будет рассматривать его как конец этого столбца. Если это так, вам нужно сделать что-то вне SQL Server в PowerShell или Python или что-то еще, чтобы разделить вкладку вашего файла или разделить другим специальным символом, которого нет нигде в данных.

Кроме того, ваш ROWTERMINATOR может иметь значение '0x1E' или другое значение в зависимости от исходной системы. Перетащите файл в NotePad ++ или другой текстовый редактор, в котором вы можете увидеть символы Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...