如何将两个 CSV(Header 和内容分开)添加到 SQL 服务器?
How do I add two CSVs (Header and Content seperatly) into SQL Server?
我收到了来自 SAP 的原始数据,我需要将其添加到一个本地数据库中。我遇到的问题是每个 table.
我收到了两个单独的数据集
- 一个 header 文件(描述名称、类型、主键、非空)
- 实际数据文件(输入到header文件中定义的行)
就我能够研究(和尝试)而言,我只能将它们添加为平面文件,这意味着我只能添加其中一个文件。要么完全缺少 header,要么缺少输入数据。
在一个 CSV 文件中手动合并它们意味着丢失所有附加信息(类型、主键、非空等),对吗?
知道我该如何继续吗?
谢谢你帮我。
很高兴在这里学到新东西。
样本header:
+-------------------------------+
| Col1 |
+-------------------------------+
| TABNAME CHAR 000030 000000 |
| DDLANGUAGE LANG 000001 000000 |
| ... |
+-------------------------------+
示例数据:
+------+-------+------+------+-----+
| Col1 | Col2 | Col3 | Col4 | ... |
+------+-------+------+------+-----+
| LFB1 | ZBOKD | A | ... | ... |
| ... | ... | ... | ... | ... |
+------+-------+------+------+-----+
合并后他们会喜欢这个(如果我没记错的话,他们需要看起来像那样):
+---------+------------+-----+-----+
| TABNAME | DDLANGUAGE | ... | ... |
+---------+------------+-----+-----+
| LFB1 | ZBOKD | A | ... |
| ... | ... | ... | ... |
+---------+------------+-----+-----+
你会想要 CREATE TABLE
, and then BULK INSERT
进入它。
- 打开您的 header 文件并确定列名和数据类型是什么
- 根据 header 文件中的信息在 SQL 服务器中创建 table
- 将数据文件批量插入到您的table
即使 header 和数据在同一个文件中,您也会 忽略 第一行,因为它不包含数据。
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')
逗号分隔 files can be a pain,主要是任何列中的任何值都可以包含逗号。在这种情况下,SQL 服务器会将其视为该列的末尾。如果是这种情况,您需要在 PowerShell 中的 SQL 服务器或 Python 或其他任何东西之外做一些事情,以使您的文件制表符分隔,或由另一个在任何地方都找不到的特殊字符分隔数据。
此外,您的 ROWTERMINATOR
可能需要 '0x1E'
或其他值,具体取决于源系统。将文件拖放到 NotePad++ 或其他可以看到 Unicode 符号的文本编辑器中。
我收到了来自 SAP 的原始数据,我需要将其添加到一个本地数据库中。我遇到的问题是每个 table.
我收到了两个单独的数据集- 一个 header 文件(描述名称、类型、主键、非空)
- 实际数据文件(输入到header文件中定义的行)
就我能够研究(和尝试)而言,我只能将它们添加为平面文件,这意味着我只能添加其中一个文件。要么完全缺少 header,要么缺少输入数据。
在一个 CSV 文件中手动合并它们意味着丢失所有附加信息(类型、主键、非空等),对吗?
知道我该如何继续吗?
谢谢你帮我。
很高兴在这里学到新东西。
样本header:
+-------------------------------+
| Col1 |
+-------------------------------+
| TABNAME CHAR 000030 000000 |
| DDLANGUAGE LANG 000001 000000 |
| ... |
+-------------------------------+
示例数据:
+------+-------+------+------+-----+
| Col1 | Col2 | Col3 | Col4 | ... |
+------+-------+------+------+-----+
| LFB1 | ZBOKD | A | ... | ... |
| ... | ... | ... | ... | ... |
+------+-------+------+------+-----+
合并后他们会喜欢这个(如果我没记错的话,他们需要看起来像那样):
+---------+------------+-----+-----+
| TABNAME | DDLANGUAGE | ... | ... |
+---------+------------+-----+-----+
| LFB1 | ZBOKD | A | ... |
| ... | ... | ... | ... |
+---------+------------+-----+-----+
你会想要 CREATE TABLE
, and then BULK INSERT
进入它。
- 打开您的 header 文件并确定列名和数据类型是什么
- 根据 header 文件中的信息在 SQL 服务器中创建 table
- 将数据文件批量插入到您的table
即使 header 和数据在同一个文件中,您也会 忽略 第一行,因为它不包含数据。
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')
逗号分隔 files can be a pain,主要是任何列中的任何值都可以包含逗号。在这种情况下,SQL 服务器会将其视为该列的末尾。如果是这种情况,您需要在 PowerShell 中的 SQL 服务器或 Python 或其他任何东西之外做一些事情,以使您的文件制表符分隔,或由另一个在任何地方都找不到的特殊字符分隔数据。
此外,您的 ROWTERMINATOR
可能需要 '0x1E'
或其他值,具体取决于源系统。将文件拖放到 NotePad++ 或其他可以看到 Unicode 符号的文本编辑器中。