Вставка BCP пропустить один столбец БД - PullRequest
0 голосов
/ 21 февраля 2020

Я использую BCP с форматом файла XML для импорта из csv в базу данных SQL.

Это работает, пока я не добавлю новый столбец с именем DATERIF, который я должен пропустить, но Я не могу. С помощью следующих шаблонов, вместо пропуска столбца, импорт также заполняет этот, оставляя последний (MODELLO) пустым, я пытался добавить после 6-го столбца строку, подобную этой, но в этом случае возникает ошибка во время выполнения.

<COLUMN SOURCE="0" NAME="DATERIF" xsi:type="SQLDATETIME" />

здесь полный файл шаблона

<?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="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="2" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="4" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="5" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="6" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="7" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="8" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="9" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="10" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
        <FIELD ID="11" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="20"
               COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
    </RECORD>
    <ROW>
        <COLUMN SOURCE="1" NAME="HOSTNAME" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="2" NAME="IP_MACCH" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="3" NAME="LOGIN" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="4" NAME="T_TYPE" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="5" NAME="DATA_RIL" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="6" NAME="ORA_RIL" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="0" NAME="DATERIF" xsi:type="SQLDATETIME"/>
        <COLUMN SOURCE="7" NAME="CUSTOMER" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="8" NAME="NUMORDINE" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="9" NAME="OPERATORE" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="10" NAME="SERIALNUM" xsi:type="SQLVARYCHAR" LENGTH="20"/>
        <COLUMN SOURCE="11" NAME="MODELLO" xsi:type="SQLVARYCHAR" LENGTH="20"/>
    </ROW>
</BCPFORMAT>

Как я могу пропустить это поле при импорте в следующие? Спасибо Андреа

1 Ответ

1 голос
/ 21 февраля 2020

Я предполагаю, что вы используете MS SQL Server. Сценарий, в котором таблица БД имеет один или несколько дополнительных столбцов, разрешается с помощью представления. Это определение представления должно исключать ненужные столбцы. После этого вы можете вставить BULK INSERT в представление вместо таблицы DB.

Это задокументировано в BOL: Использование BULK INSERT с представлением

...