BCP SQL 服务器无效日期格式

BCP SQL Server Invalid Date Format

我有大量数据要导入到 Azure SQL 数据库中。我正在复制的 table 也有一个 smalldatetime 格式的时间戳字段,然后是另外 195 个浮点数字段。我正在尝试将 csv 文件 BCP 到 table。 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.

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

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

可以下载 CSV 文件示例here

创建table不同字段名的语句可以下载here.

感谢 Nick.McDermaid 的解决方案:

我在数据库上创建了一个分段 table,所有列名都与目标 table 相同,但每个列类型都是 varchar。

然后 bcp 使用字符选项 -c 上传到分段 table。

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

那么它所需要的只是以下 SQL 代码来更新实际 table 并从暂存 table.

中删除数据
INSERT INTO dbo.Meters
SELECT * FROM dbo.Staging
GO

DELETE FROM dbo.Staging
GO