Массовая вставка полей фиксированной ширины - PullRequest
6 голосов
/ 30 сентября 2010

Как указать длину поля с помощью команды «Массовая вставка»?

Пример: Если у меня была таблица с именем 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?

Ответы [ 2 ]

12 голосов
/ 30 сентября 2010

Я думаю, вам нужно определить формат файла

например

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

Для того, чтобы это работало, вам, конечно, нужен файл формата.

См.здесь для общей информации о создании:

Создание файла форматирования

Можно предположить, что, глядя на Схему , что-то вроде этого можетсделай это:

<?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>
3 голосов
/ 30 сентября 2010

Вы хотите использовать файл формата с вашим BULK INSERT . Что-то вроде:

9.0
2
1     SQLCHAR     0     03     ""         1     Field1          ""
2     SQLCHAR     0     03     "\r\n"     2     Field2          ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...