it-swarm.com.de

Unerwartet EOF in BCP angetroffen

Beim Versuch, Daten in Azure zu importieren. Erstellen einer Textdatei in Management Studio 2005. Ich habe sowohl eine durch Kommas als auch durch Tabulatoren getrennte Textdatei ausprobiert.

BCP IN -c -t, -r\n -U -S -P Ich erhalte die Fehlermeldung {SQL Server Native Client 11.0]. Unerwarteter EOF in BCP-Datendatei

Hier ist das Skript, mit dem ich die Datei erstellt habe:

 SELECT top 10  [Id]
      ,[RecordId]
      ,[PracticeId]
      ,[MonthEndId]
      ,ISNULL(CAST(InvoiceItemId AS VARCHAR(50)),'') AS InvoiceItemId
      ,[Date]
      ,[Number]
      ,[RecordTypeId]
      ,[LedgerTypeId]
      ,[TargetLedgerTypeId]
      ,ISNULL(CAST(Tax1Id as varchar(50)),'')AS Tax1Id
      ,[Tax1Exempt]
      ,[Tax1Total]
      ,[Tax1Exemption]
      ,ISNULL(CAST([Tax2Id] AS VARCHAR(50)),'') AS Tax2Id
      ,[Tax2Exempt]
      ,[Tax2Total]
      ,[Tax2Exemption]
      ,[TotalTaxable]
      ,[TotalTax]
      ,[TotalWithTax]
      ,[Unassigned]
      ,ISNULL(CAST([ReversingTypeId] AS VARCHAR(50)),'') AS ReversingTypeId
      ,[IncludeAccrualDoctor]
      ,12 AS InstanceId
  FROM <table>

Hier ist die Tabelle, in die sie eingefügt wird

CREATE TABLE [WS].[ARFinancialRecord](
    [Id] [uniqueidentifier] NOT NULL,
    [RecordId] [uniqueidentifier] NOT NULL,
    [PracticeId] [uniqueidentifier] NOT NULL,
    [MonthEndId] [uniqueidentifier] NOT NULL,
    [InvoiceItemId] [uniqueidentifier] NULL,
    [Date] [smalldatetime] NOT NULL,
    [Number] [varchar](17) NOT NULL,
    [RecordTypeId] [tinyint] NOT NULL,
    [LedgerTypeId] [tinyint] NOT NULL,
    [TargetLedgerTypeId] [tinyint] NOT NULL,
    [Tax1Id] [uniqueidentifier] NULL,
    [Tax1Exempt] [bit] NOT NULL,
    [Tax1Total] [decimal](30, 8) NOT NULL,
    [Tax1Exemption] [decimal](30, 8) NOT NULL,
    [Tax2Id] [uniqueidentifier] NULL,
    [Tax2Exempt] [bit] NOT NULL,
    [Tax2Total] [decimal](30, 8) NOT NULL,
    [Tax2Exemption] [decimal](30, 8) NOT NULL,
    [TotalTaxable] [decimal](30, 8) NOT NULL,
    [TotalTax] [decimal](30, 8) NOT NULL,
    [TotalWithTax] [decimal](30, 8) NOT NULL,
    [Unassigned] [decimal](30, 8) NOT NULL,
    [ReversingTypeId] [tinyint] NULL,
    [IncludeAccrualDoctor] [bit] NOT NULL,
    [InstanceId] [tinyint] NOT NULL,
 CONSTRAINT [PK_ARFinancialRecord] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

Es gibt tatsächlich mehrere hunderttausend tatsächliche Datensätze, und ich habe dies von einem anderen Server aus gemacht, der einzige Unterschied besteht in der Version von Management Studio.

6
alemus

Wenn die Datei tabulatorgetrennt ist, sollte das Befehlszeilenflag für das Spaltentrennzeichen -t\t-t, sein.

3
maxymoo

"Unerwartetes EOF" bedeutet normalerweise, dass der Spalten- oder Zeilenabschluss nicht das ist, was Sie erwarten. Das heißt, dass Ihre Befehlszeilenargumente für diese Dateien der Datei entsprechen

Typische Ursachen:

  • Unix vs. Windows-Zeilenenden
  • Textdaten, die Ihren Spaltenbegrenzer enthalten (Komma in Istdaten)
  • Oder eine Mischung aus beiden.

SSMS sollte nichts damit zu tun haben: Es ist das Format (erwartet vs. tatsächlich), das zählt

3
gbn

Nur zu Ihrer Information, dass ich genau diesen Fehler gefunden habe, und es stellte sich heraus, dass meine Zieltabelle eine zusätzliche Spalte enthielt als die DAT-Datei!

2
Scooter

Öffnen Sie die CSV-Datei in Excel und speichern Sie sie als neue CSV-Datei

enter image description here

1
Hussain

In jedem Fall, bei dem ich auf diesen Fehler gestoßen bin, ist dies ein Problem, bei dem die Anzahl der Spalten in der Tabelle nicht mit der Anzahl der in der Textdatei getrennten Spalten übereinstimmt. Der einfachste Weg, dies zu bestätigen, besteht darin, die Textdatei in Excel zu laden und die Spaltenanzahl mit der der Tabelle zu vergleichen.

1
Clark Vera

Ich denke, die meisten von uns bevorzugen Beispiele aus der realen Welt als Syntaxhinweise. Daher habe ich Folgendes getan:

bcp LoadDB.dbo.test in C:\temp\test.txt -S 123.66.108.207 -U testuser -P testpass -c -r/r

Meine Daten waren ein Auszug aus einer Unix-basierten Oracle-Datenbank, die durch Tabulatoren getrennt wurde und das Zeilenendezeichen LF hatte.

Da meine Daten tabulatorbegrenzt waren, habe ich keinen -t-Parameter angegeben. Der Standardwert für bcp ist tab.

Da mein Zeilenabschlusszeichen ein LineFeed (LF) -Zeichen war, habe ich -r/r verwendet

Da meine Daten alle in char-Felder geladen wurden, habe ich den Parameter -c verwendet

0
Dave Fish

Ich werde meine Erfahrungen mit diesem Thema teilen. Meine Benutzer schickten mir UTF-8-Codierung und alles funktionierte einwandfrei. Mein Ladevorgang schlug fehl, als die Kodierung in UCS-2 LE BOM auf Encode aktualisiert wurde. Verwenden Sie Notepad ++, um diese Einstellung zu überprüfen. 

Die Umstellung auf UTF-8 hat mein Problem behoben. 

Dieser link hat mir geholfen, mein Problem zu lösen. 

 enter image description here

0
ProgSky