Azureにデータをインポートしようとしています。 Management Studio 2005でテキストファイルを作成しました。コンマとタブ区切りの両方のテキストファイルを試しました。
BCP IN -c -t、-r\n -U -S -Pエラーが表示されます{SQL Server Native Client 11.0]予期しないEOF BCPデータファイルで発生しました
これが、ファイルの作成に使用したスクリプトです。
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>
これが挿入されるテーブルです
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)
)
実際には数十万の実際のレコードがあり、私はこれを別のサーバーから実行しました。唯一の違いは、管理スタジオのバージョンです。
ファイルがタブ区切りの場合、列区切りのコマンドラインフラグは-t\t
-t,
「予期しないEOF」とは、通常、列または行のターミネーターが期待どおりでないことを意味します。つまり、これらのコマンドライン引数はファイルと一致します
典型的な原因:
SSMSはそれとは何の関係もないはずです。重要なのはフォーマット(予想vs実際)です
これとまったく同じエラーが発生し、宛先テーブルにDATファイルよりも1列多く含まれていることがわかりました。
私はこのエラーに遭遇したすべてのケースで、テーブルの列の数がテキストファイルで区切られた列の数と一致しないという問題になります。これを確認する簡単な方法は、テキストファイルをExcelに読み込み、列数をテーブルの数と比較することです。
私たちのほとんどは、構文のヒントよりも実際の例を好むと思います。
bcp LoadDB.dbo.test in C:\ temp\test.txt -S 123.66.108.207 -U testuser -P testpass -c -r/r
私のデータは、タブ区切りで、LF行末文字が含まれていたUnixベースのOracle DBからの抜粋です。
データはタブで区切られていたため、-tパラメーターを指定しなかったため、bcpのデフォルトはタブです。
行の終端文字がLineFeed(LF)文字だったため、-r/rを使用しました
データがすべてcharフィールドに読み込まれていたため、-cパラメータを使用しました
この問題について私の経験を共有します。ユーザーからUTF-8エンコーディングが送信されてきましたが、すべて問題なく動作していました。 UCS-2 LE BOMでエンコードをエンコードに更新すると、ロードが失敗し始めました。これらの設定を確認するには、notepad ++を使用してください。
UTF-8に戻すと問題が解決しました。
これは link で問題を解決するのに役立ちました。