web-dev-qa-db-fra.com

Comment résoudre "Copie BCP dans l'échec"

J'ai une table qui ressemble à quelque chose comme ceci dans une base de données SQL Server à Azure:

CREATE TABLE [dbo].[TableName](
[col01] [int] IDENTITY(1,1) NOT NULL,
[col02] [varchar](255) NOT NULL,
[col03] [varchar](255) NOT NULL,
[col04] [datetime] NULL,
[col05] [datetime] NULL,
[col06] [nvarchar](255) NULL,
[col07] [nvarchar](max) NULL,
[col08] [nvarchar](255) NULL,
[col09] [nvarchar](max) NULL,
[col10] [int] NULL,
[col11] [nvarchar](255) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

J'ai un fichier de données qui ressemble un peu à ceci:

$ head datafile.csv 
2134024,SRC001,SE,NULL,NULL,NULL,NULL,NULL,NULL,1,SRC
2134025,SRC002,SE,NULL,NULL,NULL,NULL,NULL,NULL,2,SRC
2134026,SRC003,SE,NULL,NULL,NULL,NULL,NULL,NULL,3,SRC
2134027,SRC004,SE,NULL,NULL,NULL,NULL,NULL,NULL,4,SRC
2134028,SRC005,SE,NULL,NULL,NULL,NULL,NULL,NULL,5,SRC
2134029,SRC006,SE,NULL,NULL,NULL,NULL,NULL,NULL,6,SRC
2134030,SRC007,SE,NULL,NULL,NULL,NULL,NULL,NULL,7,SRC
2134031,SRC008,SE,NULL,NULL,NULL,NULL,NULL,NULL,8,SRC
2134032,SRC009,SE,NULL,NULL,NULL,NULL,NULL,NULL,9,SRC
2134033,SRC010,SE,NULL,NULL,NULL,NULL,NULL,NULL,10,SRC
$ wc -l 
713224
$ 

J'essaie d'importer en utilisant BCP en cours d'exécution sur mon ordinateur portable Linux:

$ bcp TableName in ./datafile.csv -S niceclouddbservername.database.windows.net -U myusername -dmydatabasename -c -t ','
Password: <I paste my password here>


Starting copy... <this takes a few seconds>

BCP copy in failed
$

Deux questions, l'une est intéressante en ce moment:

  1. Pourquoi cela ne fonctionne-t-il pas?
  2. Comment puis-je le déboguer?

Ce que j'ai fait jusqu'à présent:

  • Utilisé Duckduckgo (et Google pour une bonne mesure) pour rechercher une explication
  • Re-lisez les documents, trouvés d'autres exemples, essayé différentes variations
  • Essayé avec juste les 10 premiers enregistrements
  • Vérifié (essayé au moins) que les datatypes correspondent à l'entrée
  • Tester avec un mauvais mot de passe connu pour vérifier qu'il produirait un message d'erreur différent
  • Consulté tout ce qui semblait à distance de la liste des "questions similaires"
3
Erik I

Voici comment je recommande de le faire, ce qui est adapté aux données de caractère:

  1. générer un fichier de format
  2. modifier le fichier de format pour correspondre à la structure de données d'entrée
  3. téléchargez le fichier de données à l'aide du fichier de format généré à l'étape 2

les commandes correspondantes sont alors comme suit:

  1. cours bcp [<my_db_name>].<my_schema_name>.<my_table_name> format nul -c -f <my_format_file_name>.fmt -t\<my_delimiter_char> -S <my_db_server> -U <my_db_user>
  2. utilisez n'importe quel éditeur de texte si l'édition est nécessaire
  3. cours bcp [<my_db_name>].<my_schema_name>.<my_table_name> in <my_data_file> -f <my_format_file_name>.fmt -t\<my_delimiter_char> -b <my_batch_size> -m <my_max_errors> -e <my_error_file> -S <my_db_server> -U <my_db_user>

Ensuite, vous pouvez inspecter <my_error_file> Pour voir comment ça s'est passé. L'exécution sans erreur devrait produire vide <my_error_file>.

2
meyhane