web-dev-qa-db-ja.com

BCPの問題:予期しないEOF BCPデータファイルで発生しました

そのように定義されたテーブルがあります:

CREATE TABLE [dbo].[IpMetadata](
    [StartIp] [bigint] NOT NULL,
    [EndIp] [bigint] NOT NULL,
    [CountryCode] [char](10) NOT NULL,
    [ProxyType] [varchar](50) NULL,
    [ProxyDescription] [varchar](50) NULL,
    [IspName] [varchar](100) NULL,
    [MobileCarrier] [varchar](50) NULL,
    [MobileCarrierCode] [varchar](50) NULL,
    [Latitude] [varchar](50) NULL,
    [Longitude] [varchar](50) NULL,
    [PostalCode] [varchar](50) NULL,
    [City] [varchar](50) NULL,
    [Region] [varchar](50) NULL,
    [Country] [varchar](50) NULL,
    [GmtOffset] [varchar](50) NULL,
    [SupportsDaylightSavings] [char](10) NULL,
    [MetroCode] [varchar](50) NULL,
    [AddressCount] [int] NOT NULL,
     CONSTRAINT [PK_IpMetadata] PRIMARY KEY CLUSTERED 
    (
        [StartIp] ASC,
        [EndIp] ASC
    )
)

次のように、このテーブルに挿入するタブ区切りのCRLF終了行を含むUTF-8エンコードのサンプリングファイル(D:\ data\ipsnip.csv)があります。

#start-ip   end-ip  Edge-two-letter-country proxy-type  proxy-description   isp-name    mobile-carrier  mobile-carrier-code Edge-latitude   Edge-longitude  Edge-postal-code    Edge-city   Edge-region Edge-country    Edge-gmt-offset Edge-in-dst Edge-metro-code address-count
0   0   **                  0   0   0   0   reserved    *** *** +9999   n   -1  0
1   255 **                  0   0   0   0   reserved    *** *** +9999   n   -1  254
256 16777215    **                  0   0   0   0   reserved    *** *** +9999   n   -1  16776959
16777216    16777343    au                  0   -37.7596    145.134 3106    templestowe vic aus +1000   n   36211   127
16777344    16777407    au                  0   -37.7596    145.134 3106    templestowe vic aus +1000   n   36211   63
16777408    16777471    au                  0   -37.7596    145.134 3106    templestowe vic aus +1000   n   36211   63
16777472    16778239    cn          chinanet fujian province network        0   26.0786 119.298 350000  fuzhou  35  chn +800    n   156115  767
16778240    16779263    au          big red group       0   -37.8387    144.99  3141    south yarra vic aus +1000   n   36206   1023
16779264    16781311    cn          chinanet guangdong province network     0   30.6611 104.082 510000  guangzhou   44  chn +800    n   156196  2047
16781312    16785407    jp          i2ts inc.       0   35.6838 139.754 100-0001    tokyo   13  jpn +900    n   -1  4095

次のようにBCPコマンドを実行します。

bcp MyDatabase.dbo.IpMetadata in D:\data\ipsnip.csv -F2 -Slocalhost -n -T

私は次のような応答を返します:

Starting copy...
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 11 for SQL Server]Unexpected EOF encountered in BCP data-file

BCP copy in failed

列と行のターミネーターを明示的に指定してみました。 Unicode列の定義を使用してみました。行末をCRLFではなくLFに変更してみました。フィールドターミネータをセミコロン/パイプに置き換えてみました。-nおよび-N。他に何を試したらいいのか分かりません。誰でも手伝ってくれる?

4
Jeremy Holovacs

したがって、-n-Nnotであることがわかりました。 dbメタデータを使用して着信データを暗黙的に変換すると想定していましたが、それはバイナリデータを想定しているようです。

私はそれを-cに変更し、問題なく動作しました。

2
Jeremy Holovacs

質問の下でのジェイコブのコメントは私を助けました!

列1には本当にハッシュが含まれていますか? 1行のデータのみで試しましたか? >またはユニコード文字の場合は-w(確認したと思いますが、言及する価値があると思いました)– Jacob HJun 7 '17 at 14:37

コードに-wを追加すると、ファイルのインポートに役立ちます。

0
user183173