Risoluzione dei problemi relativi a BCP e formato dei file

bcp format sql sqlbulkcopy

Domanda

Prima di tutto, mi dispiace per il lungo post. Volevo essere accurato con i miei esempi / dati e la maggior parte di questo post è proprio questo.

Ho ereditato un processo di importazione in blocco utilizzando un file di formato (.fmt) nel mio nuovo lavoro. Questo processo è stato creato dal ragazzo che ha lavorato qui prima di me, ed è il mio lavoro imparare questo processo (e aggiustarlo ora). Ho una conoscenza limitata di questa roba, ma ho fatto qualche ricerca. Dopo alcune settimane, non sono arrivato da nessuna parte. Ecco cosa sto lavorando con ...

--BCP Comando per importare i dati da C: \ Desktop \ 20180629_2377167_PR_NP.txt alla tabella LA_Temp.dbo.ProvReg

bcp LA_Temp.dbo.ProvReg IN C: \ Desktop \ 20180629_2377167_PR_NP.txt -f C: \ Desktop \ PROVREG.FMT -T -S SERVERNAME -k -m 1000000

--Tabella Struttura il cui file di formato è stato creato da:

SELECT [NPI]
  ,[D1]
  ,[EntityType]
  ,[D2]
  ,[ReplaceNPI]
  ,[D3]
  ,[ProvName]
  ,[D4]
  ,[MailAddr1]
  ,[D5]
  ,[MailAddr2]
  ,[D6]
  ,[MailCity]
  ,[D7]
  ,[MailState]
  ,[D8]
  ,[MailZip]
  ,[D9]
  ,[MailCountry]
  ,[D10]
  ,[MailPhone]
  ,[D11]
  ,[MailFax]
  ,[D12]
  ,[LocAddr1]
  ,[D13]
  ,[LocAddr2]
  ,[D14]
  ,[LocCity]
  ,[D15]
  ,[LocState]
  ,[D16]
  ,[LocZip]
  ,[D17]
  ,[LocCountry]
  ,[D18]
  ,[LocPhone]
  ,[D19]
  ,[LocFax]
  ,[D20]
  ,[Taxonomy1]
  ,[D21]
  ,[Taxonomy2]
  ,[D22]
  ,[Taxonomy3]
  ,[D23]
  ,[OtherProvID]
  ,[D24]
  ,[OtherProvIDType]
  ,[D25]
  ,[ProvEnumDate]
  ,[D26]
  ,[LastUpdate]
  ,[D27]
  ,[DeactivateRC]
  ,[D28]
  ,[DeactivateDate]
  ,[D29]
  ,[ReactivateDate]
  ,[D30]
  ,[Gender]
  ,[D31]
  ,[License]
  ,[D32]
  ,[LicenseState]
  ,[D33]
  ,[AuthorizedContact]
  ,[D34]
  ,[ContactTitle]
  ,[D35]
  ,[ContactPhone]
  ,[D36]
  ,[PanelOpen]
  ,[D37]
  ,[Language1]
  ,[D38]
  ,[Language2]
  ,[D39]
  ,[Language3]
  ,[D40]
  ,[Language4]
  ,[D41]
  ,[Language5]
  ,[D42]
  ,[AgeRestrict]
  ,[D43]
  ,[PCPMax]
  ,[D44]
  ,[PCPActual]
  ,[D45]
  ,[PCPAll]
  ,[D46]
  ,[EnrollInd]
  ,[D47]
  ,[EnrollDate]
  ,[D48]
  ,[FamilyOnly]
  ,[D49]
  ,[SubSpec1]
  ,[D50]
  ,[SubSpec2]
  ,[D51]
  ,[SubSpec3]
  ,[D52]
  ,[ContractName]
  ,[D53]
  ,[ContractBegin]
  ,[D54]
  ,[ContractEnd]
  ,[D55]
  ,[Parish1]
  ,[D56]
  ,[Parish2]
  ,[D57]
  ,[Parish3]
  ,[D58]
  ,[Parish4]
  ,[D59]
  ,[Parish5]
  ,[D60]
  ,[Parish6]
  ,[D61]
  ,[Parish7]
  ,[D62]
  ,[Parish8]
  ,[D63]
  ,[Parish9]
  ,[D64]
  ,[Parish10]
  ,[D65]
  ,[Parish11]
  ,[D66]
  ,[Parish12]
  ,[D67]
  ,[Parish13]
  ,[D68]
  ,[Parish14]
  ,[D69]
  ,[Parish15]
  ,[D70]
  ,[PCPInd]
  ,[D71]
  ,[DisplayOnline]
  ,[D72]
  ,[ExpAgeRestrict]
  ,[D73]
  ,[Suffix]
  ,[D74]
  ,[Title]
  ,[D75]
  ,[PrescriberInd]
  ,[Spaces]
  ,[End]

FROM [LA_Temp]. [Dbo]. [ProvReg]

- Esempio Dati file di testo (questa è una riga) 9999999999 ^ 0 ^ ^ ^ 3800 HMA BLVD STE 305 ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 5048729679 ^ ^ 3800 HMA BLVD ^ ^ METAIRIE ^ LA ^ 70006 ^ ^ 9999999999 ^ ^ 207Q00000X ^ ^ ^ 0000000 ^ 2001 ^ ^ 00000000 ^ ^ 00000000 ^ 00000000 ^ F ^ ^ LA ^ ^ ^ ^ N ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 2 ^ 00000 ^ 00000 ^ 00000 ^ ^ ^ ^ ^ ^ ^ 000000000000000000000000000000 ^ 00000000 ^ 00000000 ^ 26 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 00 ^ 0 ^ 0 ^ Accetta pazienti di età 000-000 ^ ^ MD ^ ^

--Formato il file

11.0

153

1 SQLCHAR 0 40 "\ t" 1 NPI SQL_Latin1_General_Pref_CP1_CI_AS

2 SQLCHAR 0 2 "\ t" 2 D1 SQL_Latin1_General_Pref_CP1_CI_AS

3 SQLCHAR 0 2 "\ t" 3 EntityType

... fino in fondo ...

153 SQLCHAR 0 2 "\ r \ n" 153 Fine

Ho cambiato directory, nomeserver e alcuni dei dati del file di testo per mantenere la sicurezza, tuttavia è molto simile.

Ecco il problema che sto incontrando: Con il "\ t" utilizzato nel file di formato appena creato dalla tabella SQL, viene visualizzato l'errore: [Microsoft] [SQL Server Native Client 11.0] EOF imprevisto rilevato nel file di dati BCP .

Se cambio questo solo in "" o "^" (come penso 'dovrebbe essere dato che il file di testo usa il delimitatore di carota), le righe iniziarono a copiare con errore [Microsoft] [SQL Server Native Client 11.0] Dati di stringa , troncatura destra SQLState = 22001, NativeError = 0. Copia BCP non riuscita.

Se qualcuno può per piacere indicarmi la giusta direzione qui per la risoluzione di questo problema, o se vedi qualcosa fuori posto, per favore fatemelo sapere. Come ho detto, sono stato a questo per un po 'di tempo, e posso usare qualsiasi suggerimento che posso ottenere. Sfortunatamente, non c'è nessuno nella mia azienda che posso chiedere a riguardo.

Risposta popolare

prova ad aggiungere l'opzione -e al tuo comando bcp. questo ti darà un file di errore in cui BCP scriverà alcune linee samlpe dal file con cui ha avuto problemi. Molto utile per la risoluzione del tipo di errore che si sta verificando ora (è corretto modificare il delimitatore nel file di formato).

L'errore che stai ricevendo ora "string dati" e "troncamento" è proprio come afferma. Tuttavia, questo troncamento può verificarsi per una serie di motivi. Le colonne della tabella di destinazione potrebbero non essere abbastanza grandi da contenere i dati contenuti tra i delimitatori di campo definiti. Potrebbero esserci dei delimitatori che compaiono nei tuoi dati e quindi questo potrebbe ingannare l'utilità bcp nel pensare che una colonna sia terminata prima di finire nel file (questo è meno probabile con il delimitatore che stai usando ... ma non si sa mai ... Preferisco sempre la larghezza fissa, se possibile.). E, naturalmente, la fonte dei dati potrebbe benissimo averti scritto un file che contraddice qualsiasi cosa concordata sulle specifiche ti ha portato a definire la tua destinazione come tu hai.

L'errore è preciso, il trucco sta nel trovare dove. Utilizzare l'opzione -e per consentire a BCP di acquisire righe problematiche:

BCP table_dest IN "C: \ FILE.TXT" -S SVR -T -f "C: \ FORMAT_FILE.txt" -e "C: \ ERROR_FILE.txt"

"Error_file.txt" includerà i numeri di riga e includerà un campione di linee che non potrebbe gestire. Basta copiare e incollare per trovare nel file che stai cercando di caricare per vedere di persona.

Suggerisco caldamente di utilizzare uno strumento di modifica del testo più avanzato. Non utilizzare il blocco note o il wordpad di Windows. Usa qualcosa come notepad ++ o ultraedit per ispezionare i file di testo ascii.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché