Как создать файл .fmt и экспортировать данные в несколько таблиц из смешанного входного файла - PullRequest
0 голосов
/ 13 мая 2011

Я пытаюсь настроить файл .fmt с помощью утилиты bcp. Я успешно смог создать это раньше (используя таблицу, в которую данные экспортируются в качестве входных данных):

bcp cmsDatabase.dbo.Table1 формат nul -T -c -f Table1Format.fmt

9.0
3
1       SQLCHAR       0       12      "\t"     1     Col1_Table1      ""
2       SQLCHAR       0       100     "\t"     2     Col2_Table1      SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       0       "\t"     3     Col3_Table1      SQL_Latin1_General_CP1_CI_AS

Таблица1, из которой он был создан: Col1_Table1 int (первичный ключ) Col2_Table1 nvarchar (50) Col3_Table1 nvar

Теперь я столкнулся с проблемой. У меня есть входной файл .txt / .csv (плоский файл с разделителями) с данными, которые не будут импортированы непосредственно в одну таблицу, он должен входить во многие таблицы (И, один напрямую попадает в строки, другие данные необходимо вводить в столбцы таблицы 2), пример данных входного файла:

"Col1_Table1x" "Col2_Table1x" "Col3_Table1x" "Col1_Table2x, Col1_Table2y, Col1_Table2z"

Обновление: В приведенном выше файле значения должны входить в:

Col1_Tablex -> Col1_Table1 column of Table1
Col2_Tablex -> Col2_Table1 column of Table1
Col3_Table1x ->  Col3_Table1 column of Table1

Table1:

Col1_Table1   Col2_Table1   Col3_Table1
-------------------------------------------
Col1_Table1x   Col2_Table1x   Col3_Table1x

До сих пор я могу заставить его работать.

Что я пытаюсь выяснить:

"Col1_Table2, Col1_Table2, Col1_Table2, ....." -> несколько записей, которые должны быть помещены в таблицу Table2, заполнение Col_Table2 значениями, разделенными запятыми, и с Col1_Table1 в качестве внешнего ключа.

Т.е. в Table2 должно быть

    Col1_Table1      Col1_Table2
----------------------------------------------
    Col1_Table1x    Col1_Table2x
    Col1_Table1x    Col1_Table2y
    Col1_Table1x    Col1_Table2z

, где Col1_Table2 должен идти как строки в Table2 (и разделены запятыми), а Col1_Table1 является внешним ключом для Table2, поэтому его тоже нужно скопировать.

Есть ли способ создать файл .fmt, который позволит копировать этот тип смешанного ввода?

Дополнительные сведения: Каждый раз, когда мне нужно загрузить таблицы из этого входного файла, я могу обрезать все старые данные и заново заполнить. Любой из столбцов может иметь специальные символы, такие как <, ", и т. Д., Так есть ли способ справиться с этим тоже? </p>

1 Ответ

1 голос
/ 13 мая 2011

Если объем данных небольшой / умеренный, вы можете просто импортировать данные в промежуточную таблицу и импортировать в две таблицы на другом шаге.

Также вы можете пропустить несколько столбцов в файле данныхиспользуя два разных файла формата и используя их для вставки в разные таблицы, пропуская столбцы из других таблиц.

http://msdn.microsoft.com/en-us/library/ms187908.aspx

Если использовать специальные символы, единственный хороший способ решить эту проблему - использоватьразделители нескольких столбцов.Я работаю в музыкальной индустрии, поэтому иногда для правильного импорта данных я использую 3 разных разделителя столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...