【问题标题】:BCP Utility - omit default values in import fileBCP 实用程序 - 忽略导入文件中的默认值
【发布时间】:2018-08-21 18:16:41
【问题描述】:

我有一张桌子:

CREATE TABLE [dbo].[EXTRACT](
    ID int IDENTITY,
    CREATE_DTTM datetime default GETDATE() NOT NULL,
    CONTRACT_ID varchar(30) NOT NULL,
    ACCOUNT_NUMBER varchar(30) NOT NULL,
    EXCEPTION_REASON varchar(max),
    PRIMARY KEY(ID ASC)
);

还有一个只提供第 3、4 和 5 列的源文件。下面是我的 XML 格式文件:

<?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="CharTerm" TERMINATOR="," MAX_LENGTH="12"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="24"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="ID" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="CREATE_DTTM" xsi:type="SQLDATETIME"/>
  <COLUMN SOURCE="3" NAME="CONTRACT_ID" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="4" NAME="ACCOUNT_NUMBER" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="5" NAME="EXCEPTION_REASON" xsi:type="SQLVARYCHAR"/>
 </ROW>
</BCPFORMAT>

适用于这个输入文件:

,,contract_2,account_2,exception_reason_2

但是是否可以省略输入文件中的前两个字段以使其如下:

contract_2,account_2,exception_reason_2

【问题讨论】:

    标签: sql-server bcp


    【解决方案1】:

    From the docs,从格式文件中删除您不想填充的 column 行,并相应地重新编号字段和来源。

    <?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="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
      <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
     </RECORD>
     <ROW>
      <COLUMN SOURCE="1" NAME="CONTRACT_ID" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="2" NAME="ACCOUNT_NUMBER" xsi:type="SQLVARYCHAR"/>
      <COLUMN SOURCE="3" NAME="EXCEPTION_REASON" xsi:type="SQLVARYCHAR"/>
     </ROW>
    </BCPFORMAT>
    

    话虽如此,最安全、最干净的方法是将数据批量导入到与源文件形状相同的临时表中,然后调用将数据从临时表移动到最终目标表。

    【讨论】:

    • 我从文档中推断出相同的结果,但它不起作用。如果我按照您的描述调整格式文件,我会收到“日期格式无效”错误。我不想使用另一个形状像我的数据提取的表,因为目标表 [EXTRACT] 已经是一个临时表,将从中处理行并将其与处理结果一起推送到“历史”表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2015-11-11
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多