我在 Azure 的 SQL Server 数据库中有一个看起来像这样的表:
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
我有一个看起来有点像这样的数据文件:
$ 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
$
我尝试使用在我的 linux 笔记本电脑上运行的 bcp 导入它:
$ 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
$
两个问题,一个现在很有趣:
- 为什么这不起作用?
- 我该如何调试它?
到目前为止我做了什么:
- 使用duckduckgo(和谷歌很好的衡量标准)来寻找解释
- 重新阅读文档,找到其他示例,尝试不同的变体
- 仅尝试前 10 条记录
- 已验证(至少尝试过)数据类型与输入匹配
- 使用已知的错误密码进行测试以验证它是否会产生不同的错误消息
- 从“类似问题”列表中咨询了所有看似远程相关的内容
这是我推荐的方法,它是为字符数据量身定制的:
相应的命令如下:
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>
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>
然后,您可以检查
<my_error_file>
它是如何进行的。没有任何错误的执行应该产生 empty<my_error_file>
。