从一个大的平面文件中批量插入前 1000 行

Jen*_*iya 1 sql-server bcp bulk-insert

我有一个包含数亿行的大型平面文件。我只想插入其中的前 1000 个。我怎样才能做到这一点?

Joh*_* N. 6

bcp 导入

您可以在命令提示符下使用 Microsoft SQL Server 的bcp实用程序从庞大的数据文件中导入数据。

bcp 说明

bcp 实用程序以用户指定的格式在 Microsoft SQL Server 实例和数据文件之间批量复制数据。bcp 实用程序可用于将大量新行导入 SQL Server 表或将表中的数据导出到数据文件中。除了与 queryout 选项一起使用时,该实用程序不需要 Transact-SQL 知识。要将数据导入表中,您必须使用为该表创建的格式文件或了解表的结构以及对其列有效的数据类型

示例语法

C:\> bcp YOUR_TABLE -d YOUR_DB -i INPUT_FILE -S YOUR_SERVER -F 1 -L 1000 -U YOUR_LOGIN -P YOUR_PASSWORD -f FORMAT_FILE
Run Code Online (Sandbox Code Playgroud)

这翻译成:

  • bcp
    批量复制程序
  • YOUR_TABLE
    您要将数据导入到的表
  • -d YOUR_DB
    您要连接的数据库的名称
  • -i INPUT_FILE
    大文件的完整路径名和文件名(例如 C:\temp\bigfile.txt)
  • -S YOUR_SERVER
    您要连接的服务器的名称
  • -F number
    要导入的第一行
  • -L number
    要导入的最后一行
  • -U YOUR_LOGIN
    SQL Server 登录(或者,您可以使用 -T 来建立可信连接)
  • -P YOUR_PASSWORD
    SQL Server 登录密码
  • -f FORMAT_FILE
    根据您的表定义,您可能需要一个格式文件,该文件定义了您要向其中导入数据的表的结构以及 INPUT_FILE 中的分隔符。可以在此处此处找到有关格式文件的更多信息。

您的命令应该如下所示:

bcp MEGA_TABLE -d Test_DB -i C:\temp\huge_data.txt -S localhost -F 1 -L 1000 -U sa -P secretnottelling -f c:\temp\huge_data.fmt
Run Code Online (Sandbox Code Playgroud)

bcp 格式文件

根据表和输入文件的复杂性,您可能必须创建一个单独的 bcp 格式文件来容纳输入文件、目标表或两者中缺少的列。这可以通过导出没有格式文件的表格来实现:

bcp YOUR_TABLE out c:\temp\sample_data.txt -S localhost -T -d YOUR_TABLE
Run Code Online (Sandbox Code Playgroud)

bcp 会问你一些关于格式文件的字段和终止符的问题,然后会要求你提供一个名称:

Enter the file storage type of field ID [int-null]:
Enter prefix-length of field ID [1]:
Enter field terminator [none]:

[multiple iterations]

Enter the file storage type of field Fnct_ID [int-null]:
Enter prefix-length of field Fnct_ID [1]:
Enter field terminator [none]: ;

Do you want to save this format information in a file? [Y/n] y
Host filename [bcp.fmt]: C:\temp\huge_data.fmt

Starting copy...

0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1
Run Code Online (Sandbox Code Playgroud)

您现在有一个可用于 bcp 导入的目标表的格式文件。

格式文件看起来有点像这样:

12.0
8
1       SQLINT              1       4       ";"    1     ID                   ""
2       SQLNCHAR            2       200     ";"    2     Question             Latin1_General_CS_AS
3       SQLNCHAR            2       200     ";"    3     Link                 Latin1_General_CS_AS
4       SQLNCHAR            2       100     ";"    4     Tbl                  Latin1_General_CS_AS
5       SQLNCHAR            2       2000    ";"    5     Info                 Latin1_General_CS_AS
6       SQLINT              1       4       ";"    6     Tbl_ID               ""
7       SQLINT              1       4       ";"    7     Src_ID               ""
8       SQLINT              1       4       ";"    8     Fnct_ID              ""
Run Code Online (Sandbox Code Playgroud)

这只是关于如何使用bcp 实用程序从文件导入数据的基本入门。

回答

  1. 为目标表创建格式文件 (*.fmt) 使用 bcp
  2. 使用 -F 和 -L 参数导入数据
  3. 检查导入

参考

由于您的问题中没有 SQL Server 版本,我参考了 SQL Server 2012 文档。