如何使用 bcp 命令创建 fmt 文件并仅从目标 table 中选择列的子集?

How do you create an fmt file using the bcp command and only selecting a subset of columns from the target table?

我正在使用以下模板通过 bcp 命令创建 .fmt 文件:

bcp schema.dbo.table format nul -S servername\sqlserver-engine -f filename.fmt -c -T

此命令创建一个制表符分隔文件,其中包含目标 table 的所有列以及适当的数据 type/length 规范。

但是,在我的用例中,只有一部分列会有数据,因此为了完成批量插入,需要一个手动过程来消除将为空的列并重新编号 . fmt 文件。有没有一种方法可以创建包含列子集(仅需要的列)的 .fmt 文件以消除此手动过程?

三个选项:

  1. 以编程方式自行创建格式文件。不要将 BCP 与 "format" 选项一起使用。针对 information_schema 编写您想要的 table 的查询。将该查询放入内置的 bcp 命令并在 os 上执行该命令。 fyi,只需要在格式文件的每个 "column" 之间有一个 space。不需要让它看起来与 BCP "format" 命令给你的完全一样。

  2. 在要导出的 table 之上创建一个视图。消除那里不需要的列。 bcp 出那个视图。

  3. 将所有内容保持原样以供导出,并在进入目的地的过程中忽略您不喜欢的列。无法在格式文件中将目标设置为“0”,它将被忽略。