web-dev-qa-db-fra.com

Impossible de récupérer une ligne de OLE Fournisseur de base de données "BULK" pour le serveur lié "(null)"

J'essaie de charger ma base de données avec des tonnes de données à partir d'un fichier .csv de 1,4 Go. Mais lorsque j'essaie d'exécuter mon code, des erreurs se produisent. 

Voici mon code:

USE [Intradata NYSE] 
GO
CREATE TABLE CSVTest1
(Ticker varchar(10) NULL,
dateval date NULL,
timevale time(0) NULL,
Openval varchar(10) NULL,
Highval varchar(10) NULL,
Lowval varchar(10) NULL,
Closeval varchar(10) NULL,
Volume varchar(10) NULL
)
GO

BULK
INSERT CSVTest1
FROM 'c:\intramerge.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest1
GO
--Drop the table to clean up database.
DROP TABLE CSVTest1
GO

J'essaie de construire une base de données avec beaucoup de cotes boursières. Mais je reçois ce message d'erreur:

Msg 4832, niveau 16, état 1, ligne 2 Chargement en bloc: une fin inattendue de fichier a été rencontré dans le fichier de données. Msg 7399, niveau 16, état 1, Ligne 2 Le fournisseur de base de données OLE "BULK" pour le serveur lié "(null)" a signalé une erreur. Le fournisseur n’a donné aucune information sur l'erreur. Msg 7330, Niveau 16, État 2, Ligne 2 Impossible d'extraire une ligne de OLE fournisseur de base de données "BULK" pour le serveur lié "(null)"

Je ne comprends pas grand chose à SQL, mais j'espère attraper une chose ou deux. J'espère que quelqu'un verra ce qui pourrait être très évident.

16
Espen Skeie

Ressusciter une vieille question, mais au cas où cela aiderait quelqu'un d'autre: après de nombreux essais et erreurs, j'ai enfin (enfin!) Pu me débarrasser de cette erreur en modifiant ceci:

ROWTERMINATOR = '\n'

Pour ça:

ROWTERMINATOR = '0x0A'
11
starkos

J'ai eu le même problème. 

Solution:

Vérifiez le CSV ou le fichier texte dans les éditeurs de texte tels que notepad +. La dernière ligne peut être incomplète. Enlevez-le.

11
Anil Kumar C

La même erreur se produisait lorsque le nombre de champs délimités dans mon fichier CSV était différent de celui des colonnes de ma table. Vérifiez si vous avez le bon nombre de champs dans intramerge.csv.

6
Tim Partridge

J'ai eu cette erreur lorsque mon fichier de format (spécifié à l'aide du paramètre FORMATFILE) avait une largeur de colonne inférieure à la taille réelle de la colonne (par exemple, varchar(50) au lieu de varchar(100)).

2
Chris Staley

J'ai eu cette exception lorsque le champ char de ma table SQL était trop petit pour le texte entrant. Essayez d'agrandir la colonne. 

1
mikelus

C'était une vieille question mais il me semble que ma conclusion éclairerait d'autres personnes ayant un problème similaire.

La valeur de délai d'attente SSIS par défaut semble être de 30 secondes. Ainsi, toute opération liée au service ou IO dans votre package va bien au-delà de cette valeur de délai d'expiration et entraîne un délai d'expiration. L'augmentation de cette valeur de délai d'expiration (remplacez "0" par aucun délai) résoudra le problème.

1
HOKBONG

Cela peut être une mauvaise idée avec 1,5 Go, mais vous pouvez l’essayer sur un sous-ensemble (commencez par quelques lignes):

CREATE TABLE CSVTest1
(Ticker varchar(MAX) NULL,
    dateval varchar(MAX) NULL,
    timevale varchar(MAX) NULL,
    Openval varchar(MAX) NULL,
    Highval varchar(MAX) NULL,
    Lowval varchar(MAX) NULL,
    Closeval varchar(MAX) NULL,
    Volume varchar(MAX) NULL
)

... faites votre INSERTION EN VRAC, puis

SELECT MAX(LEN(Ticker)),
    MAX(LEN(dateval)),
    MAX(LEN(timevale)),
    MAX(LEN(Openval)),
    MAX(LEN(Highval)),
    MAX(LEN(Lowval)),
    MAX(LEN(Closeval)),
    MAX(LEN(Volume))

Cela vous aidera à savoir si vos estimations de colonne sont bien fausses. Vous pouvez également constater que vos colonnes sont en panne ou que l'instruction BULK INSERT peut encore échouer pour une autre raison.

0
Gary

je veux juste partager ma solution à cela. Le problème était la taille des colonnes de la table, utilisez varchar (255) et tout devrait fonctionner.

0
Master Yi