【问题标题】:Bulk insert fixed width fields批量插入固定宽度字段
【发布时间】:2010-09-29 21:13:20
【问题描述】:

如何使用批量插入命令指定字段长度?

示例:如果我有一个名为 c:\Temp\TableA.txt 的表并且它有:

123ABC
456DEF

我有一张桌子,例如:

use tempdb
CREATE TABLE TABLEA(
Field1 char(3),
Field2 char(3)
)
BULK INSERT TableA FROM 'C:\Temp\TableA.txt'
SELECT * FROM TableA

那我该如何指定 Field1 和 Field2 的长度呢?

【问题讨论】:

    标签: sql-server sql-server-2005


    【解决方案1】:

    我觉得你需要定义一个格式文件

    例如

    BULK INSERT TableA FROM 'C:\Temp\TableA.txt'
    WITH FORMATFILE = 'C:\Temp\Format.xml'
    SELECT * FROM TableA
    

    不过,要实现这一点,显然您需要一个格式化文件。

    有关创建一个的一般信息,请参见此处:

    Creating a Format File

    根据Schema 的猜测,可能会有这样的事情:

    <?xml version="1.0"?>
    <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <RECORD>
      <FIELD ID="1" xsi:type="CharFixed" LENGTH="3"/>
      <FIELD ID="2" xsi:type="CharFixed" LENGTH="3"/>
    </RECORD>
    <ROW>
      <COLUMN SOURCE="1" NAME="Field1" xsi:type="SQLCHAR" LENGTH="3"/>
      <COLUMN SOURCE="2" NAME="Field2" xsi:type="SQLCHAR" LENGTH="3"/>
    </ROW>
    </BCPFORMAT>
    

    【讨论】:

    • 啊,好的。谢谢!我刚刚得知尝试使用 Bulk Insert 时出现此问题:Msg 4834, Level 16, State 4, Line 1 您没有使用批量加载语句的权限。
    • 格式文件位不需要括号吗? WITH (FORMATFILE = 'C:\Temp\Format.xml')
    【解决方案2】:

    您希望将format file 与您的BULK INSERT 一起使用。比如:

    9.0
    2
    1     SQLCHAR     0     03     ""         1     Field1          ""
    2     SQLCHAR     0     03     "\r\n"     2     Field2          ""
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多