Как экспортировать данные служб SSIS в стандарт SQL и импортировать с массовой вставкой в ​​SQL Express? - PullRequest
0 голосов
/ 09 апреля 2009

Я хотел бы использовать SSIS для создания экспорта плоских файлов таблиц базы данных, а затем импортировать их в различные дистрибутивы SQL Express. Как вы можете догадаться, SSIS недоступна в версии Express. Когда я делаю массовую вставку, она выдает ошибку:

Msg 4866, Level 16, State 8, Line 1 The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly.

Сгенерированный файл ascii (1252) с char (09) (табуляция) между полями и char (0d) char (0a), заканчивающимся строкой (я думаю, это \ r \ n).

Это файл формата (4-ая колонка - ширина столбца):

9.0
5
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL Latin1 General CP1 CI AS
3 SQLCHAR 0 498 "\t" 3 Path SQL Latin1 General CP1 CI AS
4 SQLCHAR 0 12 "\t" 4 Width ""
5 SQLCHAR 0 12 "\r\n" 5 Height ""

Пример данных, начиная с верхней части файла:

Record_ID Filename Path Width Height
1437 BreadCakeCooknPie.eps G:\BakedGoods\BreadCakeCooknPie.eps 595 647
1438 CakeChocolateRoses.eps G:\BakedGoods\CakeChocolateRoses.eps 1200 848 1024 *
*

Я импортирую его со следующим кодом T-SQL:

bulk insert item_table from 'Item_Table.txt' with
( FORMATFILE='Item_Table.fmt', FIRSTROW=2)

Поля таблицы:

[Record_ID] [int] NULL,
[Filename] [nvarchar](249) NULL,
[Path] [nvarchar](249) NOT NULL,
[Width] [int] NULL,
[Height] [int] NULL

Есть ли какие-нибудь рецензии? Есть идеи, как исправить ошибку? Есть идеи, как получить файл формата, созданный службами SSIS? Есть другие идеи?

Большое спасибо за рассмотрение моего вопроса.

Ответы [ 3 ]

1 голос
/ 10 апреля 2009

Это сбой в исходной части потока данных? Можете ли вы опубликовать метаданные, относящиеся к источнику? Время от времени я обнаруживал, что с плоскими файлами SSIS неправильно оценивает размеры или типы данных при подключении к плоскому файлу. Когда это происходит, задача потока данных завершится неудачно в исходной части импорта, как только она встретит данные, длина которых превышает ожидаемое в позиции соединение с плоским файлом.

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

Пожалуйста, дайте нам знать, где это происходит в потоке данных.

0 голосов
/ 10 апреля 2009

Это частичный ответ. По-видимому, вы можете начать с BCP, сгенерировать файл формата и дамп текстовых данных, использовать файл формата из bcp и точно сопоставить экспорт текста в SSIS. Порядок расположения физических полей в файле данных (даже если вы можете упорядочить их в файле формата) и отсутствие пропущенных полей (даже если они вам не нужны) являются ключевыми.

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

Контент, экспортируемый из служб SSIS, по-прежнему не совпадает, но достаточно близок для импорта. Например, когда bcp экспортировал данные, он поместил .000 за полями даты и .0 за числовыми полями (с плавающей точкой и т. Д.).

Мой окончательный формат файла, который работал ниже. Обратите внимание, что все поля являются SQLCHAR, хотя некоторые из них в юникоде, что все размеры неверны (int равен 10, но имеет 12), (длина текста 249, но 498), и (мне пришлось поместить все поля а не только те, которые я хотел импортировать. Это неправильно пропускало поля.)

Безумный мир. Есть идеи, почему это так?

9.0
29
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 498 "\t" 3 Path SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 498 "\t" 4 Extension_Win SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 498 "\t" 5 Short_Filename_Win SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 498 "\t" 6 Volume SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 24 "\t" 7 Created ""
8 SQLCHAR 0 24 "\t" 8 Last_Modified ""
9 SQLCHAR 0 24 "\t" 9 Cataloged ""
10 SQLCHAR 0 24 "\t" 10 Last_Updated ""
11 SQLCHAR 0 12 "\t" 11 File_Size ""
12 SQLCHAR 0 498 "\t" 12 Mac_File_Type SQL_Latin1_General_CP1_CI_AS
13 SQLCHAR 0 498 "\t" 13 Mac_Creator SQL_Latin1_General_CP1_CI_AS
14 SQLCHAR 0 498 "\t" 14 Mac_Zone SQL_Latin1_General_CP1_CI_AS
15 SQLCHAR 0 12 "\t" 15 Thumbnail_Size ""
16 SQLCHAR 0 12 "\t" 16 Color_Mode ""
17 SQLCHAR 0 30 "\t" 17 Horizontal_Resolution ""
18 SQLCHAR 0 30 "\t" 18 Vertical_Resolution ""
19 SQLCHAR 0 12 "\t" 19 Width ""
20 SQLCHAR 0 12 "\t" 20 Height ""
21 SQLCHAR 0 12 "\t" 21 MultipageCount ""
22 SQLCHAR 0 12 "\t" 22 PlaceHolder ""
23 SQLCHAR 0 12 "\t" 23 Watermarked ""
24 SQLCHAR 0 12 "\t" 24 FileStoreID ""
25 SQLCHAR 0 498 "\t" 25 Directory_Path SQL_Latin1_General_CP1_CI_AS
26 SQLCHAR 0 12 "\t" 26 RID ""
27 SQLCHAR 0 498 "\t" 27 Cataloged_By SQL_Latin1_General_CP1_CI_AS
28 SQLCHAR 0 498 "\t" 28 Updated_By SQL_Latin1_General_CP1_CI_AS
29 SQLCHAR 0 0 "\r\n" 29 File_Description SQL_Latin1_General_CP1_CI_AS

0 голосов
/ 09 апреля 2009

Рассматривали ли вы запуск экспорта SSIS в формате канала или запятой? Могут возникнуть проблемы с обработкой символа табуляции между экспортом и импортом.

Все, что вы здесь изложили, похоже, не указывает на проблему с SSIS или массовой вставкой, просто что-то с форматом самого файла.

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