2010-11-09 17 views
0

Je tente d'insérer un fichier CSV dans une base de données Microsoft SQL Server Management Studio comme ceci:SQL BULK INSERT d'erreurs

BULK INSERT [dbo].[STUDY] 
     FROM 'C:\Documents and Settings\Adam\My Documents\SQL Server Management Studio\Projects\StudyTable.csv' 
    WITH 
    ( 
     MAXERRORS = 0, 
     FIELDTERMINATOR = ',', 
     ROWTERMINATOR = '\n' 
    ) 

mais je reçois des erreurs:

Msg 4863, Level 16, State 1, Line 2 
    Bulk load data conversion error (truncation) for row 1, column 9 (STATUS). 

    Msg 7399, Level 16, State 1, Line 2 
    The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error. 

    Msg 7330, Level 16, State 2, Line 2 
    Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". 

Malheureusement, Je ne peux pas fournir le contenu de StudyTable.csv, pour protéger la vie privée de l'entreprise pour laquelle nous travaillons. Je peux cependant garantir la validité du fichier csv. Il a été exporté à partir de la version d'Excel d'OpenOffice, et je suis passé à travers et vérifié qu'il était valide.

EDIT2 Voici une version fictive du fichier CSV:

1234,,,1234,1234,,"asdf","asdf","Z","asd",7/1/2010 12:23,8/5/2010 13:36,9/4/2010 13:36,"(asdf,1661,#1234,F,T)","F",,,"F",,"68866",1234,1234,1234,"F" 

Voici un script pour créer la table STUDY:

CREATE TABLE [dbo].[STUDY] 
(
    [STUDY_ID] INT IDENTITY(1,1) NOT NULL, 
    [PARENT_ID] INT, 
    [GROUP_ID] INT, 
    [WORKFLOW_NODE_ID] INT, 
    [STUDY_TEMPLATE_ID] INT, 
    [INSPECTION_PLAN_ID] INT, 
    [NAME] VARCHAR(255), 
    [DESCRIPTION] VARCHAR(4000), 
    [STATUS] VARCHAR, 
    [OLD_STATUS] VARCHAR, 
    [CREATED_ON] DATE, 
    [COMPLETED_ON] DATE, 
    [AUTHORIZED_ON] DATE, 
    [EVENTS] VARCHAR, 
    [NEEDS_REVIEW] CHAR, 
    [HAS_NOTES] CHAR, 
    [HAS_AUDITS] CHAR, 
    [STUDY_PART] CHAR, 
    [STUDY_TYPE] VARCHAR, 
    [EXTERNAL_REFERENCE] VARCHAR, 
    [CREATED_BY] INT, 
    [COMPLETED_BY] INT, 
    [AUTHORISED_BY] INT, 
    [ARCHIVED_CHILD_COMPLETE] CHAR 
) 
+0

Plus d'information sera nécessaire pour vous aider. Votre erreur se produit sur la ligne 1, alors peut-être créer et publier une seule ligne fictive? De plus, à quoi ressemble la table STUDY? –

Répondre

1

On dirait que les données de votre colonne STATUS en le fichier .csv est plus long que la définition du champ dans votre table SQL.

Vérifiez la définition sur ce champ et assurez-vous que les données que vous avez dans le fichier .csv vont correspondre (à la fois la longueur et le type).

+0

C'était 'CHAR (1)', et je l'ai changé en 'VARCHAR'; toujours pas de chance. – Entity

+0

@TheAdamGaskins - Quelle est la longueur du champ d'état dans le fichier .csv? Vous devez toujours spécifier une longueur maximale pour les champs varchar. – JNK

+0

Son un maximum d'un caractère – Entity

0

La première erreur est probablement due au fait qu'une colonne est trop grande pour s'adapter à la base de données. Premièrement, le fichier CSV contient-il des en-têtes de colonnes?

La deuxième erreur est très générique.

Est-ce que l'un de vos champs contient une virgule comme partie de leurs données - par exemple 37, High Street qui n'est pas entre guillemets? Je suis venu décoller beaucoup de fois dans le passé en raison de "problèmes" dans les données (les données sont valides, mais pas tout à fait ce qui est attendu). Si votre fichier CSV contient quelques milliers de lignes ou plus, que se passe-t-il si vous essayez d'importer uniquement les cent premières lignes (ou dix)?

+0

Aucun en-tête. C'est seulement une rangée. – Entity