2009-04-09 6 views
0

Je voudrais utiliser SSIS pour créer des exportations de fichiers plats de table de base de données, puis les importer dans des installations SQL Express distribuées différemment. Comme vous pouvez le deviner, SSIS n'est pas disponible dans la version Express. Quand je fais l'insert en vrac, il des erreurs avec:Comment exporter des données SSIS sur SQL Standard et importer avec insertion en bloc sur SQL 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.

Le fichier généré est ascii (1252) avec char (09) (onglet) entre les champs et char (0d) char (0a) mettant fin à une ligne (Je pense que c'est \ r \ n).

C'est le fichier de format (4 col est la largeur du col):

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 ""

L'échantillon de début de données ing du haut du fichier:

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

j'importer avec le code T-SQL suivante:

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

Le tableau les champs sont:

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

Tous les comptes-rendus disponibles? Une idée de comment corriger l'erreur? Une idée de comment saisir le fichier de format créé par SSIS? D'autres idées?

Merci beaucoup d'avoir réfléchi à ma question.

Répondre

0

Ceci est une réponse partielle. Apparemment, vous pouvez commencer avec BCP, le faire générer un fichier de format, et un vidage de données de texte, utiliser le fichier de format de bcp et faire correspondre l'exportation de texte exactement dans SSIS. La disposition des champs physiques dans le fichier de données (même si vous pouvez les commander dans le fichier de format) et aucun champ manquant (même si vous n'en avez pas besoin) semble être la clé.

Je devais manuellement faire correspondre les méta-données d'exportation de texte au fichier de format (la main tapait les métadonnées sous les colonnes dans le gestionnaire de connexions de fichiers texte). Cela a provoqué l'ordre physique des champs dans le fichier texte pour correspondre à l'ordre physique dans la table (j'ai utilisé la colonne de fichier de format pour faire correspondre ces avant, ce qui ne semble pas fonctionner).

Le contenu exporté à partir de SSIS n'est toujours pas le même, mais suffisamment proche pour être importé. Par exemple, lorsque bcp exportait les données, il mettait .000 derrière les champs de date et .0 derrière les champs numériques (float, etc.).

Mon fichier de format final qui a fonctionné est ci-dessous. Notez que tous les champs sont SQLCHAR même si certains sont unicode, que toutes les tailles sont fausses (int est 10 mais il en a 12), (le texte est de longueur 249 mais il en a 498), et (j'ai dû mettre tous les champs et pas seulement ceux que je voulais importer, il ne sautait pas les champs correctement.)

Crazy world. Des idées pourquoi ce serait le cas?

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

Bien que ce ne soit pas une bonne réponse: avec la ligne de commande bcp, j'exporte un fichier de format et des données réelles. Je configure les colonnes du fichier texte SSIS (3ème onglet) exactement comme le fichier de format. Ensuite, je configure les métadonnées SSIS pour qu'elles correspondent aux données exportées BCP. Tout importe bien, certaines données tronquent comme des secondes sur une date. –

+0

Cool! Toutes nos félicitations! –

0

Avez-vous envisagé d'exécuter votre exportation SSIS dans un format délimité par des tubes ou des virgules? Il peut y avoir des problèmes avec la façon dont le caractère de tabulation est traité entre l'exportation et l'importation. Tout ce que vous avez présenté ici ne semble pas indiquer un problème avec SSIS ou l'insertion en masse, juste quelque chose avec le format du fichier lui-même.

+0

I a essayé de commutation à onglets tuyaux et eol à un point-virgule. Il se plaint que les données sont trop longues pour le terrain. J'ai essayé à la fois Unicode et 1252 avec la même réponse. Il semble que le problème est de tourner l'INT stocké comme 10 caractères dans le fichier texte ne traduit pas le champ int de 4 octets peut-être? –

+0

Hmm, c'est plutôt perplexe. Je recommande de garder le terminateur de ligne (eol) le même que précédemment (\ r \ n). Voyez si cela aide. –

1

Est-ce un échec sur la partie source du flux de données? Pouvez-vous publier les métadonnées relatives à la source? J'ai trouvé occasionnellement avec des fichiers plats SSIS n'estime pas les tailles ou les types de données correctement sur la connexion de fichier plat. Lorsque cela se produit, une tâche de flux de données échoue sur la partie source de l'importation dès qu'il rencontre des données qui dépassent la longueur de la connexion de fichier plat attendue dans la position.

Echoue-t-il sur la partie destination du flux de données?Si oui, cela fonctionne-t-il au moins si vous utilisez un lecteur de données comme destination au lieu de la table cible réelle? Je suppose que votre problème est plus tôt dans le pipeline, mais s'il dépasse la partie source du flux de données, vous pouvez au moins isoler le problème en tant que problème de destination.

Veuillez nous indiquer où il se situe dans le flux de données.

+0

Il casse lorsque je fais le "Bulk Insert" à partir d'une fenêtre de requête. Rien dans le SSIS ne montre aucune erreur. Curieusement, si j'utilise BCP pour vider la table sur le disque, y compris le fichier de format, alors essayez de l'insérer en bloc, il échoue avec la même erreur. –

+0

J'ai également essayé d'exporter tous les champs de la table en tant que SP1 2005 SQL a un bogue où bcp et insertion en bloc échouent avec un fichier de format qui spécifie moins de champs que la table cible. J'ai aussi vérifié que toutes les métadonnées ne sont pas unicode. –

+0

J'ai également essayé d'enlever la rangée d'en-tête. –

Questions connexes