Я использую такую команду:
bcp "tablename" format nul -w -x -f "Format.xml" -d databasename -S servername -G
Который генерирует файл формата (сокращенно) примерно так:
<?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="NCharTerm" TERMINATOR="\t\0" MAX_LENGTH="42"/>
<FIELD ID="2" xsi:type="NCharTerm" TERMINATOR="\t\0" MAX_LENGTH="32" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="NCharTerm" TERMINATOR="\t\0" MAX_LENGTH="256" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<!-- ABRIDGED -->
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="ID" xsi:type="SQLBIGINT"/>
<COLUMN SOURCE="2" NAME="BUSINESS_UNIT" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="SERVICE_NUMBER" xsi:type="SQLVARYCHAR" />
<!-- ABRIDGED -->
</ROW>
</BCPFORMAT>
Однако тип данных в SQL Server для SERVICE_NUMBER допускает значение NULL, поэтому я ожидал бы следующее:
<COLUMN SOURCE="3" NAME="SERVICE_NUMBER" xsi:type="SQLVARYCHAR" NULLABLE="YES"/>
Команда -k, похоже, предназначена только для импорта, тогда как я хотел бы, чтобы файл формата существовал как способ документирования известной схемы, которую представляет файл экспортированных данных.