BCP SQL Server无效的日期格式

时间:2017-12-05 11:09:47

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

我有大量数据要导入Azure SQL数据库。我复制的表也有smalldatetime格式的时间戳字段,然后是另外195个浮点字段。我试图将csv文件BCP写入表中。 CSV文件具有完全相同的格式。时间戳的格式相同,但我一直收到无效的日期格式错误。

来自数据库的TimeStamp示例:

2017-11-05 12:00:00

来自csv文件的TimeStamp示例:

2017-11-27 00:16:37

我尝试使用带有-n的bcp和使用-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.

我无法在google上找到与此相关的内容,但这似乎意味着csv文件中的时间戳中有几分之一秒超过了数据库表中smalldatetime格式的大小。 csv文件中的所有时间戳都没有任何小数秒。

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

CSV文件样本可以下载here

可以下载具有不同字段名称的创建表语句here

1 个答案:

答案 0 :(得分:1)

感谢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