是否可以使用 BCP 从 SQL 导出 CSV 中的每 1000 行?

Is it possible to export every 1000 rows in a CSV from SQL using BCP?

我有一个程序调用另一个程序进行查询并生成一个 csv 文件,并且工作正常,问题是有很多联系人,我需要每 1000 个联系人分成多个文件,是可以这样做吗?

谢谢。

不,无法使用 BCP 拆分文件。 BCP 命令仅允许在使用 "out" 或 "queryout" 选项时指定单个目标文件。

要将单个数据集拆分为多个文件,请先将其拆分为 SQL,然后对每个文件执行 BCP。

另一种选择(假设 1000 条记录不是硬性要求,您只想将数据分成更小的块)- 将数据保存在单个 table 中并使用 BCP 查询数据,而不是使用 "out" 选项。为此,您需要在数据中有一列,您可以使用该列将数据拆分成块。任何数字标识符字段都适用于此。执行 bcp with query out 并添加 where 子句以通过使用数字键拆分数据来过滤行。像这样:

"select * from db.dbo.your_table where right( cast( num_key ) as varchar( 12 ) ), 1 ) = '0'"

"select * from db.dbo.your_table where right( cast( num_key ) as varchar( 12 ) ), 1 ) = '1'"

"select * from db.dbo.your_table where right( cast( num_key ) as varchar( 12 ) ), 1 ) = '2'"

and.... 依此类推,直到获得 0 到 9。这应该将我们的数据很好地分成 10 个大小均匀的块。如果您需要更小的块,请在数字键末尾使用 2 个字符并获得 100 个块。以这种方式拆分数据的许多其他方法。

但最后,您还要在这里执行 10 条 bcp 语句。每个文件创建 1 个 bcp 语句。