2013-02-16 2 views
0

Моя база данных с именем 'dictionary' имеет два столбца с именем 'column1' и 'column2'. Оба могут принимать значение NULL. Тип данных обоих столбцов - INT. Теперь я хочу вставить только столбец2 из текстового файла с помощью bcp. Я сделал файл формата. Мой формат файла, как этотМассовая вставка с использованием файла формата

<?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="7"/> 
     <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/> 
    </RECORD> 
     <ROW> 
     <COLUMN SOURCE="1" NAME="column2" xsi:type="SQLINT"/> 
     </ROW> 
    </BCPFORMAT> 

и моя основная утверждение как

BULK INSERT dictionary 
FROM 'C:\Users\jka\Desktop\n.txt' 
    WITH 
    (
    FIELDTERMINATOR = '\n', 
    ROWTERMINATOR = '\n', 
    FORMATFILE = 'path to my format file.xml' 
    ) 

Но это не сработало? Как я могу это решить?

N: B: Мой текстовый файл выглядит

123 
456 
4101 

......

еще один вопрос Отредактировано: я могу заполнить одну Колум по этой методике, но когда я заполнить другой столбец из текстового файла, как раньше, из первой строки. Как мне это сделать ???

+0

Я не вижу никакой Visual Studio, или C# –

+0

Я предполагаю, что 'dictionary' - это имя таблицы, а не базы данных. Верный? – peterm

+0

yeah dictionar - это имя таблицы @peterm – DarkenShooter

ответ

0

Предполагая, что ваш файл формата правильно, я считаю, нужно угробить FIELDTERMINATOR и ROWTERMINATOR от вашего BULK INSERT

BULK INSERT dictionary 
FROM 'C:\Users\jka\Desktop\n.txt' 
WITH (FORMATFILE = 'path to my format file.xml') 

Также убедитесь что: кодирование

  1. входного файла является правильным. В вашем случае, скорее всего, это ANSI, а не UTF-8 или Unicode.
  2. row terminator (который является вторым полевым терминатором в вашем файле формата) на самом деле \r\n, а не \n.

UPDATE Так как вам нужно, чтобы пропустить первый столбец:

С помощью файла формата XML, нет никакого способа, чтобы пропустить колонну, когда вы импортируете непосредственно в таблицу, используя BULK INSERT заявление. Для достижения желаемого результата и использования файла формата XML вам необходимо использовать OPENROWSET(BULK...) и предоставить явный список столбцов в списке выбора и в целевой таблице.

Таким образом, чтобы вставить данные только column2 использования:

INSERT INTO dictionary(column2) 
SELECT column2 
    FROM OPENROWSET(BULK 'C:\temp\infile1.txt', 
     FORMATFILE='C:\temp\bulkfmt.xml') as t1; 

Если файл данных только одно поле ваш формат файла может выглядеть следующим образом

<?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="C1" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/> 
    </RECORD> 
    <ROW> 
     <COLUMN SOURCE="C1" NAME="column2" xsi:type="SQLINT"/> 
    </ROW> 
</BCPFORMAT> 
+0

Может быть, что-то не так в файле формата. но я не понимаю. @ peterm – DarkenShooter

+0

Убедитесь, что кодировка входного файла верна. В вашем случае, скорее всего, это ANSI, а не UTF-8 или Unicode. row terminator (который является вторым полевым терминатором в вашем файле формата) на самом деле \ r \ n, а не '\ n'.Ваш файл формата работает для меня просто отлично. – peterm

+0

Но после этого, когда я хочу заполнить это значение null [в столбце2] из другого текстового файла, используя тот же метод, он не работал? Как я могу это сделать? @ Peterm – DarkenShooter

0

файл данных содержит одно поле, так ваш файл формата должен отражать это

<RECORD> 
    <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\r\n"/> 
</RECORD> 
+0

Я могу заполнить одну колонку этой техникой, но когда я заполню другой столбец из текстового файла, как раньше, начиная с 1-й строки. Как мне это сделать ??? – DarkenShooter

+0

Почему вы задаете те же вопросы, что и user2029069 и imon? – Phil

+0

это была ошибка. так что бы вы, пожалуйста, помогли мне в этом? @ phil – DarkenShooter

Смежные вопросы