BCP/ Bulk Insert Échoue (fichier délimité par des tabulations)
J'ai essayé d'importer des données (séparateur: tabulation) dans SQL server. La source de données est exporté à partir d'IBM Cognos. Les données peuvent être téléchargées à partir de: les données de l'échantillon
J'ai essayé BCP /Insertion en bloc, mais il n'a pas aidé. L'original fichier contient une ligne d'en-tête (qui doit être ignorée).
==================================
Schéma:
CREATE TABLE [dbo].[DIM_Assessment](
[QueryType] [nvarchar](4000) NULL,
[QueryDate] [nvarchar](4000) NULL,
[APUID] [nvarchar](4000) NULL,
[AssessmentID] [nvarchar](4000) NULL,
[ICDCode] [nvarchar](4000) NULL,
[ICDName] [nvarchar](4000) NULL,
[LoadDate] [nvarchar](4000) NULL
) ON [PRIMARY]
GO
=============================
Format de Fichier généré à l'aide de la commande suivante
bcp [dbname].dbo.dim_assessment format nul -c -f C:\config\dim_assessment.Fmt -S <IP> -U sa -P Pwd
Contenu du fichier de format:
11.0
7
1 SQLCHAR 0 8000 "\t" 1 QueryType SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 8000 "\t" 2 QueryDate SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 8000 "\t" 3 APUID SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 8000 "\t" 4 AssessmentID SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 8000 "\t" 5 ICDCode SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 8000 "\t" 6 ICDName SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 8000 "\r\n" 7 LoadDate SQL_Latin1_General_CP1_CI_AS
=============================
J'ai essayé de l'importation de données à l'aide de la PCA /Bulk Insert, cependant, non d'entre eux travaillaient.
bcp [dbname].dbo.dim_assessment IN C:\dim_assessment.dat -f C:\config\dim_assessment.Fmt -S <IP> -U sa -P Pwd
BULK INSERT dim_assessment FROM '\\dbserver\DIM_Assessment.dat'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\r\n'
);
GO
Je vous remercie d'avance pour votre aide@
- Ce qui n'a "aucun d'entre eux travaillaient" signifie? Avez-vous un message d'erreur? Si oui, quel est-il?
- Oui, en ce moment, je ne peut pas importer des données avec SSIS. Nous sommes à la recherche d'un moyen automatisé pour importer des données enregistrées sur le réseau dans le serveur SQL.
- Je ne suis pas sûr de savoir comment cette réponse répond à aucune de mes questions.
- Pas d'erreurs apparaissent. Sauf qu'il dit 0 les lignes copiées.
- Lorsque vous essayez d'INSERTION en bloc, c'est ce qui se passe?
- My bad, je n'ai pas vu votre commentaire avant de poster mon SSIS chose. désolé.
- C'est ce que je vois pour l'instruction bulk insert
- DataFileType sera supposé être widechar parce que le fichier de données a une signature Unicode. Msg 4866, Niveau 16, État 1, Ligne 1 Le gros échec de chargement de la. La colonne est trop long dans le fichier de données pour la ligne 1, colonne 7. Vérifiez que le champ et la marque de fin de ligne sont correctement spécifiés. Msg 7399, Niveau 16, État 1, Ligne 1, Le fournisseur OLE DB "en VRAC" du serveur lié "(null)" a signalé une erreur. Le fournisseur ne donne aucune information sur l'erreur. Msg 7330, Niveau 16, État 2, Ligne 1 Impossible de récupérer une ligne du fournisseur OLE DB "en VRAC" du serveur lié "(null)".
Vous devez vous connecter pour publier un commentaire.
Votre fichier d'entrée est dans un terrible format.
Votre fichier de format et votre
BULK INSERT
commande à la fois de l'état que la fin d'une ligne doit être un retour chariot et un saut de ligne, et qu'il y a sept colonnes de données. Toutefois, si vous ouvrez votre fichier CSV dans le bloc-notes, vous verrez rapidement que les retours chariot et les sauts de ligne ne sont pas respectées correctement dans Windows (ce qui signifie qu'ils doivent être quelque chose d'autre que précisément\r\n
). Vous pouvez également voir qu'il n'y a pas réellement de sept colonnes de données, mais cinq:Rien qu'à la regarder visuellement, vous pouvez dire qu'il n'est pas droit, et vous avez besoin pour obtenir un meilleur fichier source avant de le jeter par-dessus le mur à SQL Server et s'attendait à le manipuler en douceur:
Venez d'enregistrer votre fichier .CSV et d'insertion en bloc avec l'instruction suivante.
A Retourné Le Message
Données Chargées
Il suffit de remarquer que certaines données de la CIM nom a survolé en LoadDate Colonne, il suffit d'utiliser la
|
caractère pipe à deliminate et utiliser la même instruction bulk insert avecFIELDTERMINATOR = '|'
et les jours heureux .Starting copy... SQLState = S1000, NativeError = 0 Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in BCP data-file 21 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 78 Average : (269.23 rows per sec.)
De l'ouverture du fichier via Excel affiche les éléments suivants:
Je suppose que, dans ces conditions, l'insertion en bloc peut ne pas fonctionner correctement. Comme Excel semble gérer votre fichier dans un assez propre, vous devriez penser à une étape supplémentaire, à partir de CSV pour Excel, puis à votre base de données.
PPIC,11/20/2013 10:23,11431,10963,,Tremors ,
PPIC,11/20/2013 10:23,11431,11592,,"Glioblastoma, Barin ",
la première ligne est insérée correctement. deuxième rangée d'inserts, toutefois, la dernière colonne est enregistré en plusieurs colonnes (je crois que c'est à cause de la virgule supplémentaire) Comment puis-je régler ce problème?Starting copy... SQLState = S1000, NativeError = 0 Error = [Microsoft][SQL Server Native Client 11.0]Unexpected EOF encountered in BCP data-file 21 rows copied. Network packet size (bytes): 4096 Clock Time (ms.) Total : 78 Average : (269.23 rows per sec.)
de l'aide?Ok, donc, c'était une apparence simple tâche de pousser les données délimitées à partir des fichiers de SQL server. Je pensais BCP est la façon de faire (je l'ai utilisé plus tôt et a été un succès).
Un rapide aperçu de ce qui a été proposé:
un. fixer le fichier source
b. l'enregistrement des données dans excel natif format
c. l'enregistrement de données en tant que tuyau de données délimité par
J'ai essayé toutes les options, mais, il a été l'ajout de plusieurs étapes de mon processus, mais a ne-mesure.
Je suis tombé sur invoke-sqlcmd & import-csv commandlets à partir de powershell. S'avère, je peux importer les données à l'aide de powershell directement. il est un peu lent en ce moment, mais je peux vivre avec ça pour le moment.
Merci à tous pour votre aide!