Python 如何在bcp命令中指定长度前缀?

Python 如何在bcp命令中指定长度前缀?,python,sql,sql-server,bulkinsert,bcp,Python,Sql,Sql Server,Bulkinsert,Bcp,我正在使用bcp工具将CSV导入sql server表。我正在使用python子进程来执行bcp命令。我的示例bcp命令如下所示: bcp someDatabase.dbo.sometable IN myData.csv -n -t , -r \n -S mysqlserver.com -U myusername -P 'mypassword' 命令执行并显示 0 rows copied. 即使我删除了-t或-n选项,消息仍然是一样的。我从SQLServer文档中了解到有一种称为长度前缀的东

我正在使用bcp工具将CSV导入sql server表。我正在使用python子进程来执行bcp命令。我的示例bcp命令如下所示:

bcp someDatabase.dbo.sometable IN myData.csv -n -t , -r \n -S mysqlserver.com -U myusername -P 'mypassword'
命令执行并显示

0 rows copied.
即使我删除了-t或-n选项,消息仍然是一样的。我从SQLServer文档中了解到有一种称为长度前缀的东西(如果bcp工具与-n(本机)模式一起使用)

如何使用bcp命令指定长度前缀


我的目标是使用bcp工具将CSV导入sql server表。我首先根据CSV文件中的日期创建表,而不是为bcp创建格式文件。我希望正确插入所有数据(根据我在表格中指定的数据类型)。

如果是csv文件,则不要使用-n、-t或-r选项。使用-e errorFileName捕捉可能遇到的错误。然后可以采取适当的步骤。

如果是csv文件,则不要使用-n、-t或-r选项。使用-e errorFileName捕捉可能遇到的错误。然后可以采取适当的步骤。

ETL任务的一个非常常见的做法是首先将文本文件加载到包含所有varchar/char数据类型的“加载”表中。这避免了任何可能的隐含数据转换错误,这些错误通过BCP进行故障排除会更加困难/耗时。只需将文本文件中的字符数据传递到SQLServer中的字符数据类型列中。然后可以将数据从“加载”表移动到最终目标表中。这将允许您使用功能更强大的T-SQL命令来处理数据类型的转换。不要强迫BCP/SQL Server通过BCP直接从文本文件转换到最终表来为您转换数据类型

此外,我还建议目视检查传入的数据文件,以确认其格式是否符合规定。我经常看到行终止符\n和\r\n之间的混淆


最后,在加载数据时,还应该使用Neeraj所述的-e选项。这将捕获“数据”错误(它不报告命令/语法错误;只报告数据/格式错误)。由于传入的文件是ascii文本文件,因此您确实希望使用-c选项加载到all varchar“load”表中。

ETL任务的常见做法是首先将文本文件加载到包含所有varchar/char数据类型的“load”表中。这避免了任何可能的隐含数据转换错误,这些错误通过BCP进行故障排除会更加困难/耗时。只需将文本文件中的字符数据传递到SQLServer中的字符数据类型列中。然后可以将数据从“加载”表移动到最终目标表中。这将允许您使用功能更强大的T-SQL命令来处理数据类型的转换。不要强迫BCP/SQL Server通过BCP直接从文本文件转换到最终表来为您转换数据类型

此外,我还建议目视检查传入的数据文件,以确认其格式是否符合规定。我经常看到行终止符\n和\r\n之间的混淆


最后,在加载数据时,还应该使用Neeraj所述的-e选项。这将捕获“数据”错误(它不报告命令/语法错误;只报告数据/格式错误)。由于传入的文件是ascii文本文件,因此您确实希望使用-c选项加载到all varchar“load”表中。

省略-n将启动bcp的交互模式-询问我不需要的每个字段的类型和长度。因为我在用电脑做事python@HarisMuzaffar您有一个csv文件,所以使用-c选项。这将在将csv导入sql表时引发错误,因为我的表包含数据类型的混合,如date、intetc@HarisMuzaffarcsv文件具有可读的字符数据,记录中的每个字段用逗号分隔。使用-c和-e errorFileName选项。所有的错误都将记录在errorFileName文件中。省略-n将启动bcp的交互模式,询问我不想要的每个字段的类型和长度。因为我在用电脑做事python@HarisMuzaffar您有一个csv文件,所以使用-c选项。这将在将csv导入sql表时引发错误,因为我的表包含数据类型的混合,如date、intetc@HarisMuzaffarcsv文件具有可读的字符数据,记录中的每个字段用逗号分隔。使用-c和-e errorFileName选项。所有错误都将记录在errorFileName文件中。