Bulk Insert “Echec de chargement en masse de données erreur de conversion (troncature)”
J'ai fait des importations de données avec SQL Server BULK INSERT
tâche des centaines de fois, mais cette fois, je reçois une erreur qui est inconnu et que j'ai essayé de dépannage en vain avec Google. Vous trouverez ci-dessous le code que j'utilise avec une virgule deliminated fichier où les nouvelles lignes sont indiquées par des caractères de nouvelle ligne:
BULK INSERT MyTable
FROM 'C:\myflatfile.txt'
WITH (
FIELDTERMINATOR = ','
,ROWTERMINATOR = '/n')
GO
Il travaille constamment, pourtant, aujourd'hui, sur un simple fichier avec une date et un taux d', il échoue avec l'erreur de "Msg 4863, Niveau 16, État 1, Ligne 1 Bulk load erreur de conversion de données (troncature) pour la ligne 1, colonne 2 (ColumnTwo)." Quand je regarde le fichier, je ne vois pas pourquoi ce serait un échec (généralement le Google dépannage indique que les délimiteurs peuvent exister plusieurs fois dans une ligne, qui permettrait de relever cette erreur). À partir de ce fichier, voici le premier d'une dizaine de lignes (notez qu'il échoue sur la PREMIÈRE ligne):
1961-01-01,8.2
1961-02-01,8.2
1961-03-01,7.4
1961-04-01,7.6
1961-05-01,7.8
1961-06-01,8.5
1961-07-01,9.1
1961-08-01,8.8
1961-09-01,8.4
1961-10-01,8.8
La table, je suis l'insertion de ces données dans les deux champs il y a VARCHAR(50)
, même si quand j'ai vu la troncature j'ai élargi les champs de données à VARCHAR(2000)
et il n'a pas l'affecter.
CREATE TABLE MyTable (
ColumnOne VARCHAR(50),
ColumnTwo VARCHAR(50)
)
J'ai aussi essayé de supprimer tous les tirets pour voir si c'était le désordre des choses (même si j'ai fait beaucoup d'imports de données avec des tirets à l'aide de ce même code et il fonctionne sans erreur), et il a toujours reçu le même message d'erreur.
Une importation directe des œuvres (par Tasks
) comme SSIS, mais ce code est un échec, car il doit être en train de faire exactement la même chose?
OriginalL'auteur Tim | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Le problème est probablement la marque de fin de ligne ne fonctionne pas en raison du format de fichier.
Essayer:
MODIFIER
En fait, je viens de remarquer que vous utilisez une barre oblique, il convient de barre oblique inverse, de sorte que cela peut fonctionner:
Si votre fichier est à partir de UNIX basé sur le système, vous devez utiliser '0x0a" normalement (parce qu'UNIX utilise uniquement \n saut de ligne comme un terminator). Si votre fichier est à partir de Windows, bulkcopy va effectivement utiliser \r\n même si vous ne spécifiez \n (qui est à la fois un retour chariot et saut de ligne).
OriginalL'auteur EkoostikMartin
À partir de SQL Server Management Studio (SSMS), pour un fichier de style Unix, rowterminator il = '0x0a œuvres. Cependant, rowterminator il = '\n' n'depuis SSMS apparemment interprète le \n que un Windows de style fin de la séquence de ligne (\r\n) et des corrections/pauses pour vous.
Fait intéressant, si vous envoyez le même rowterminator il = '\n' à partir du code Java à travers le pilote JDBC SQL Server, il sera considéré comme de l'Unix de style de fin de ligne puisque rien dans le milieu jette dans l'extra \r.
Donc, vous devez faire deux choses:
1 - assurez-vous que vous comprenez comment votre fichier de données ne fait en fin de ligne.
2 - assurez-vous que vous comprenez comment votre moyen de la prestation de l'instruction BULK INSERT sql pour SQL Server est d'interpréter les séquences d'échappement. Mon expérience limitée est que l'utilisation de hex ('0x0a') pour SQL Server SQL fonctionne dans tous les environnements.
OriginalL'auteur DocOc