web-dev-qa-db-fra.com

Inattendu EOF rencontré dans le BCP

Tentative d'importation de données dans Azure. Création d'un fichier texte dans Management Studio 2005. J'ai essayé à la fois un fichier texte délimité par des virgules et des tabulations.

BCP IN -c -t, -r\n -U -S -P L'erreur {{SQL Server Native Client 11.0] inattendue EOF s'est produite dans le fichier de données BCP.

Voici le script que j'ai utilisé pour créer le fichier:

 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>

Voici le tableau dans lequel il est inséré

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)
)

Il existe en réalité plusieurs centaines de milliers de disques et je l'ai fait à partir d'un serveur différent, la seule différence étant la version de studio de gestion.

6
alemus

Si le fichier est délimité par des tabulations, l'indicateur de ligne de commande du séparateur de colonnes doit être -t\t-t,

3
maxymoo

"EOF inattendu" signifie normalement que le terminateur de colonne ou de ligne n'est pas ce à quoi vous vous attendiez C'est-à-dire que vos arguments de ligne de commande pour ceux-ci correspondent au fichier.

Causes typiques:

  • Unix vs fins de lignes Windows
  • Données texte contenant votre délimiteur de colonne (virgule dans les données réelles)
  • Ou un mélange des deux.

SSMS n'a rien à voir avec cela: c'est le format (attendu vs réel) qui compte

3
gbn

Juste un FYI que j'ai rencontré cette même erreur exacte et il s'est avéré que ma table de destination contenait une colonne supplémentaire que le fichier DAT!

2
Scooter

Dans tous les cas où j’ai rencontré cette erreur, c’est un problème où le nombre de colonnes de la table ne correspond pas au nombre de colonnes délimitées dans le fichier texte. Le moyen le plus simple de confirmer cela consiste à charger le fichier texte dans Excel et à comparer le nombre de colonnes à celui de la table.

1
Clark Vera

Je pense que la plupart d’entre nous préfèrent les exemples du monde réel aux indications de syntaxe. Voici ce que j’ai fait:

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

Mes données étaient un extrait d'une base de données Oracle basée sur Unix, délimitée par des tabulations et dotée d'un caractère de fin de ligne LF.

Comme mes données étaient délimitées par des tabulations, je n’ai pas spécifié de paramètre -t, la valeur par défaut bcp est tab.

Parce que mon terminateur de ligne était un caractère LineFeed (LF), j'ai utilisé -r/r

Comme mes données étaient toutes chargées dans des champs de caractères, j'ai utilisé le paramètre -c

0
Dave Fish

Je partagerai mon expérience avec ce problème. Mes utilisateurs m'envoyaient le codage UTF-8 et tout fonctionnait bien. Ma charge a commencé à échouer quand ils ont mis à jour le codage à Encoder dans la nomenclature UCS-2 LE. Utilisez notepad ++ pour vérifier ces paramètres. 

Revenir à UTF-8 a corrigé mon problème. 

Ce lien m'a aidé à résoudre mon problème. 

 enter image description here

0
ProgSky