Jen*_*iya 1 sql-server bcp bulk-insert
我有一个包含数亿行的大型平面文件。我只想插入其中的前 1000 个。我怎样才能做到这一点?
您可以在命令提示符下使用 Microsoft SQL Server 的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
-S YOUR_SERVER
-F number
L number
-U YOUR_LOGIN
-P YOUR_PASSWORD
-f FORMAT_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 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 实用程序从文件导入数据的基本入门。
由于您的问题中没有 SQL Server 版本,我参考了 SQL Server 2012 文档。