我有大量数据要导入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。
答案 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