L'importation dans SQL Server avec le format de fichier et d'insertion en bloc
Bonjour à tous j'ai un problème difficile à résoudre avec l'aide de BULK INSERT
de commande lorsque j'essaie d'importer des données depuis un fichier texte.
J'ai trouvé de nombreux articles et des exemples dans Internet au sujet de l'importation avec BULK INSERT
ou BCP
programme, mais ils n'aide pas à moi.
Le problème:
- Je faire de l'exportation à partir d'Oracle dans un fichier texte avec séparateur de colonne {#}
et séparateur de lignes <#>
et l'importer dans SQL Server.
La table (SQL Server):
CREATE TABLE my_DATA
(
ID_PK NUMERIC(30) NOT NULL ,
BEGIN_TIME DATETIME NULL ,
END_TIME DATETIME NULL
);
pour Oracle:
CREATE TABLE my_DATA
(
ID_PK NUMBER(30) NOT NULL ,
BEGIN_TIME TIMESTAMP NULL ,
END_TIME TIMESTAMP NULL
);
Le fichier avec le délimiteur est:
ID_PK{#}BEGIN_TIME{#}END_TIME<#>296167{#}01/01/2012 01:30:00.000{#}01/01/2012 02:00:00.000<#>296178{#}01/01/2012 02:00:00.000{#}01/01/2012 02:30:00.000<#>
Le format de fichier est:
9.0
3
1 SQLNUMERIC 0 19 {#} 1 ID_PK ""
2 SQLDATETIME 0 8 {#} 2 BEGIN_TIME ""
3 SQLDATETIME 0 8 <#> 3 END_TIME ""
Alors quand j'ai utilisé la commande:
BULK INSERT my_DATA
FROM 'D:\my_DATA.txt'
WITH
(CODEPAGE = '1251',
FIELDTERMINATOR = '{#}',
FIRSTROW = 2,
ROWTERMINATOR = '<#>' );
Cela fonctionne, mais lorsque j'essaie d'utiliser le format de fichier ne fonctionne pas:
BULK INSERT my_DATA
FROM 'D:\my_DATA.txt'
WITH (CODEPAGE = '1251',
FORMATFILE ='D:\format_file.txt');
L'erreur est:
En vrac de charge erreur de conversion de données (incompatibilité de type ou de caractère non valide
pour la page de codes spécifiée) pour la ligne 2, colonne 2 (begin_time).
J'ai cherché sur ce problème, essayez de changer datetime pour smalldate, essayez de changer la longueur de 23 ou 24. Il ne fonctionne pas. Donc, j'essaie d'importer une autre table sans date, j'utilise une colonne numérique et les colonnes de type char, mais j'ai été confrontée au même problème avec une colonne numérique:
En vrac de charge erreur de conversion de données (incompatibilité de type ou de caractère non valide
pour la page de codes spécifiée) pour la ligne 2, colonne 1 (id_pk).
table:
CREATE TABLE unit_table
(
id_pk NUMERIC(30) NOT NULL ,
name NVARCHAR(200) NULL ,
name_full NVARCHAR(200) NULL ,
CONSTRAINT PK_unit_table_2C1 PRIMARY KEY (bule_biz_unit_level_id_pk)
);
format de fichier:
9.0
3
1 SQLNUMERIC 0 1 "{#}" 1 id_pk ""
2 SQLNCHAR 0 11 "{#}" 2 name ""
3 SQLNCHAR 0 11 "{#}" 3 name_full ""
Le fichier de données ne contient que 3 lignes (bulk insert de commande est le même):
ID_PK{#}NAME{#}NAME_FULL<#>1{#}factory{#}factory<#>2{#}station{#}station<#>
Il est intéressant si le fichier ne contient que les 2 rangs:
ID_PK{#}NAME{#}NAME_FULL<#>1{#}factory{#}factory<#>
Le résultat de l'instruction bulk insert est:
(0 ligne(s) affectée)
J'ai aussi essayer de faire exemple http://msdn.microsoft.com/en-us/library/ms178129.aspx mais face avec l'erreur:
Ne peut pas charger en bloc parce que le fichier "D:\myTest.txt" ne peut pas être lu.
Système d'exploitation code d'erreur (null).
Et la dernière, j'ai essayé de l'utiliser avec bcp
programme et le visage avec trop d'erreurs.
Quelqu'un peut m'aider avec mon problème ou me donner au moins un exemple de travail avec insertion en bloc et fichier de format.
P. S.-je utiliser MS SQL Server 2005 mise à jour à la dernière version. L'OS est Windows 7 x64.
openrowset
méthode.
OriginalL'auteur Cherry | 2012-03-06
Vous devez vous connecter pour publier un commentaire.
Merci à tous. Mais le problème est que MS SQL Server nécessite SQLCHAR type, lorsque vous importer depuis un fichier texte et il n'a pas d'importance quel type de colonne dans la base de données. Dans mon problème, la solution est le remplacement de tous types de colonne, comme SQLNUMERIC, SQLDATETIME à SQLCHAR dans le format de fichier.
OriginalL'auteur Cherry
Ce n'est pas précisément ce que vous avez demandé, mais je l'ai testé et il devrait vous obtenir où vous devez aller. Autant que je sache, les informations suivantes doivent être exécutées à partir du serveur qui héberge SQL server. Vous pouvez mettre en place une tâche planifiée ou quelque chose de plus sophistiqué en bas de la route.
Vous devez d'abord créer le fichier de format. J'ai mis les différents types de données dans l'exemple, pour montrer comment ils doivent être utilisés.
Deuxième, vous devez créer un SQL
INSERT
déclaration de vos données:Et la troisième, si vous voulez exécuter à partir de la ligne de commande, comme vous le feriez BCP, vous pouvez utiliser ceci:
OriginalL'auteur gangreen