J'ai une table définie comme telle:
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
)
)
J'ai un fichier d'échantillonnage encodé en UTF-8 (D:\data\ipsnip.csv) avec des lignes terminées par des tabulations et CRLF à insérer dans ce tableau comme suit:
#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
J'exécute la commande BCP comme suit:
bcp MyDatabase.dbo.IpMetadata in D:\data\ipsnip.csv -F2 -Slocalhost -n -T
Je reçois une réponse comme ceci:
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
J'ai essayé de spécifier explicitement les terminateurs de colonne et de ligne. J'ai essayé d'utiliser des définitions de colonne unicode. J'ai essayé de changer les fins de ligne en LF au lieu de CRLF. J'ai essayé de remplacer les terminateurs de champ par des points-virgules/tuyaux. J'ai essayé -n
et-N
. Je ne sais pas quoi essayer d'autre. Quelqu'un peut-il aider?
Il s'avère donc que le -n
et le -N
sont pas ce que je voulais; J'avais supposé qu'il utilisait les métadonnées db pour convertir implicitement les données entrantes, mais il semble qu'il attende des données binaires avec cela.
Je l'ai changé en -c
et cela a fonctionné sans problème.
Le commentaire de Jacob sous la question m'a aidé!
La colonne 1 contient-elle vraiment un hachage? Avez-vous essayé avec seulement 1 ligne de données? > Ou
-w
pour les caractères unicode (je suppose que vous avez vérifié cela mais que vous avez pensé qu'il vaut la peine de le mentionner) - Jacob H7 juin 17 à 14:37
Ajouter -w
dans le code a aidé à importer mes fichiers.