sql-server - BCP SQL Server 日期格式无效

标签 sql-server csv azure azure-sql-database bcp

我有大量数据需要导入到 Azure SQL 数据库中。我正在复制的表也有一个小日期时间格式的时间戳字段,然后还有另外 195 个 float 字段。我正在尝试将 csv 文件 BCP 到表中。 CSV 文件具有完全相同的格式。时间戳的格式相同,但我不断收到无效日期格式错误。

数据库中的时间戳示例:

2017-11-05 12:00:00

csv 文件中的时间戳示例:

2017-11-27 00:16:37

我尝试使用 bcp 和 -n 以及使用 -n 生成的格式文件和使用 -x 生成的格式文件。全部给出无效的日期格式错误。

bcp dbo.Meters format nul -n -S <URL> -d <databasename> -U <username> -P <password> -f format.fmt 

bcp dbo.Meters IN "output.csv" -S <URL> -d <databasename> -U <username> -P <password> -f format.fmt -t ,

我还尝试使用 -c 选项,这给出了不同的错误:

Fractional second precision exceeds the scale specified in the parameter binding.

我在谷歌上找不到太多与此相关的信息,但这似乎意味着 csv 文件中的时间戳中有几分之一秒,超出了数据库表中的smalldatetime 格式的大小。不过,csv 文件中的时间戳都没有任何小数秒。

有谁知道为什么它认为日期采用不同的格式?提前致谢!

可以下载 CSV 文件示例 here .

不同字段名建表语句可以下载here .

最佳答案

感谢 Nick.McDermaid 的解决方案:

我在数据库上创建了一个临时表,其所有列名称与目标表相同,但每个列类型均为 varchar。

然后 bcp 使用字符选项 -c 上传到暂存表中,工作正常。

bcp dbo.Staging IN "output.csv" -S <URL> -d <databasename> -U <username> -P <password> -c -t ,

然后它只需要以下 SQL 代码来更新实际表并从临时表中删除数据。

INSERT INTO dbo.Meters
SELECT * FROM dbo.Staging
GO

DELETE FROM dbo.Staging
GO    

关于sql-server - BCP SQL Server 日期格式无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47652156/

相关文章:

Azure Kusto 数据资源管理器 - 一次调用多个管理查询

sql查询将值插入到自动递增列

sql-server - TSQL 函数计算指定日期的 30 个工作日日期 (SQL Server 2005)

mysql - 从 CSV 到 MySQL 的选择性导入

ruby - 在 Ruby 中使用转义换行符解析 CSV 文件?

php - Azure PHP Web 角色,F# 辅助角色 : developing on different machines

azure - 聚合 Azure 中的多个列(Kusto 查询语言)

c# - 为什么 ef 中的身份号码会跳到一个大数字?

sql - 当 tvp 不包含任何行时,带有输入 tvp 参数的单个 SQL 查询

R:读取变量中的列名的csv