【问题标题】:How do you create an fmt file using the bcp command and only selecting a subset of columns from the target table?如何使用 bcp 命令创建 fmt 文件并仅从目标表中选择列的子集?
【发布时间】:2020-05-28 16:11:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql-server bulkinsert bcp


    【解决方案1】:

    三个选项:

    1. 以编程方式自行创建格式文件。不要使用带有“格式”选项的 BCP。为您想要的表编写针对 information_schema 的查询。将该查询放入构建的 bcp 命令中并在 os.sys 上执行该命令。仅供参考,格式文件的每个“列”之间只需要一个空格。不需要让它看起来与 BCP“格式”命令给你的完全一样。

    2. 在要导出的表格顶部创建一个视图。消除那里不需要的列。 bcp 退出该视图。

    3. 为您的导出保留所有内容,并在进入目的地的途中忽略您不喜欢的列。不能在格式文件中将目标设置为“0”,它将被忽略。

    【讨论】:

    • 感谢您的回答。 #2 和 #3 特别有趣。
    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-05-31
    • 2013-04-28
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多