Domanda

Sto cercando di dati Inserimento di massa al database SQL Server Express. Nel fare BCP da Windows XP prompt dei comandi, ottengo il seguente errore:

C:\temp>bcp  in  -T -f  -S 

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Native Client]Unexpected EOF encountered in BCP data-file

0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 4391

Quindi, c'è un problema con EOF. Come aggiungere un carattere EOF corretto per questo file usando Perl o Python?

È stato utile?

Soluzione

EOF è fine del file. Ciò che probabilmente si è verificato è che il file non è completo; il software si aspetta che i dati, ma non c'è nessuno per essere avuto più.

Questo genere di cose accadono quando:

  • l'esportazione viene interrotta (smettere di software discarica, mentre il dumping)
  • durante la copia del file di dump interrompere la copia
  • disco pieno durante la discarica

questo tipo di cose.

A proposito, anche se EOF è di solito solo una fine del file, vi esiste un carattere EOF. Questo è usato perché terminale di ingresso (linea di comando) non si finisce come un file non, ma a volte è necessario superare un EOF a tale utilità a. Io non credo che sia utilizzato in file reali, almeno non per indicare un fine del file. Il file system sa perfettamente quando il file è terminato, non ha bisogno di un indicatore per scoprirlo.

Modifica spudoratamente copiato da un commento fornito da John Machin

Può capitare (uninentionally) in file reali. Tutto ha bisogno è (1) un utente di immissione dati di digitare Ctrl-Z per errore, vedere nulla sullo schermo, digitare lo Shift-Z, destinati, e andare avanti e (2) il software di validazione (scritto dal nipote per esempio del presidente della società ) che accetta felicemente con ogni tasto Ctrl-nei campi di testo e il database ha un piccola bomba in esso, solo aspettando che qualcuno a produrre una query a un file flat.

Altri suggerimenti

imprevisti mezzi EOF che il lettore BCP trovato un EOF quando si aspettava più dati. Questo EOF può essere:

(1) il file end-of-fisico (non più byte da leggere). Questo significa che si hanno i dati mis-formattati. Controllare verso la fine del file per un record incompleto.

o

(2) su Windows, dove sei, i programmi di lettura di un file in modalità testo onore dell'antica convenzione ereditata tramite MS-DOS da CP / M di considerare Ctrl-Z (alias ^ Z alias \ 'X1a' aka SUB aka SOSTITUTO) come un indicatore di fine del file durante la lettura da qualsiasi file, non solo un terminale. Questo include Python - il comportamento è determinato dal stdlib C. Verificare la presenza di '\ X1a' nei tuoi dati.

Aggiorna rispondere ai commenti in modo leggibile:

In Notepad ++, si può rendere visualizzare i caratteri insoliti facendo View / Visualizza / Simbolo Visualizza tutti i caratteri. È possibile cercare per fare Ctrl-F, la tipizzazione \ X1A nella casella Trova, e selezionando il pulsante di opzione estesa nel pannello di ricerca.

In alternativa, è possibile, con un po 'di Python ottenere il numero di riga della prima Ctrl-Z:

bytes = open('bcp.dat', 'rb').read()
zpos = bytes.find('\x1a')
# if zpos is -1, no Ctrl-Z in file
print 1 + bytes[:zpos].count('\r\n')

Dove è stato creato il vostro .dat non importa. Un involontario Ctrl-Z può accadere ovunque in un file creato su qualsiasi sistema operativo. E 'dove viene letto come un file di testo che le questioni - Windows? Bang!

Questo non è un problema con mancante EOF, ma con EOF che c'è e non è previsto dal BCP.

Non sono un esperto di strumento di BCP, ma sembra che ci sia qualche problema con il formato dei file di dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top