【问题标题】:SQL BULK INSERT zero seconds in datetime column from .csvSQL BULK INSERT 在 .csv 的日期时间列中插入零秒
【发布时间】:2017-03-15 17:23:00
【问题描述】:

我有许多生产机器生成的 .csv 文件。我使用 BULK INSERT 将它们加载到我们的 MSSQL 服务器中的各种表中,没有错误。我最近注意到我使用 BULK INSERT 传输数据的所有表的 datetime 列都有正确的日期和时间(小时和分钟),但是所有记录的秒数为零。

列数据类型为 DATETIME。

为什么日期时间的秒数会归零?

样本数据:

TESTBULKINSERT,TESTBULKINSERT,2017-03-10 06:01:16,,,,Z1860_1,1,0,PASSED,NA,NA,NA,0

批量插入命令:

BULK INSERT Test.dbo.vICT_DATA FROM '\\server\CSV\testfile.csv'  With ( FIELDTERMINATOR = ',', FIRSTROW = 2, MAXERRORS = 0, ROWTERMINATOR = '\n' 

结果:

PARTTYPE    SN  TDATE   JOBNO   BADGE   TESTMODE    TESTERID    NESTID  PASS_FAIL   FAILCODE    FAIL_DESC   FIRST_FAIL_VAL  UNITS   LNUM    ID
TESTBULKINSERT  TESTBULKINSERT  2017-03-10 06:01:00.000 NULL    NULL    NULL    Z1860_1 1   0   PASSED  NA  NA  NA,0    NULL    306244

【问题讨论】:

  • 尝试添加 DATAFILETYPE = 'char'
  • 使用 DATAFILETYPE = 'CHAR' 得到相同结果我刚刚尝试添加 CODEPAGE = 'ACP' 得到相同结果。
  • 你确定你没有在某处使用SMALLDATETIME吗?
  • 这就是我最初认为的问题,但在将表更新为 DATETIME 后我仍然遇到问题。
  • 我使用 SQL 2016 express 进行测试,我的秒数完好无损。你有什么 SQL 版本?

标签: sql sql-server csv datetime bulkinsert


【解决方案1】:

当通过 VIEW 插入带有秒数的 DATETIME 时,VIEW 的数据类型也应该设置为 DATETIME。在 VIEW 中使用 SMALLDATETIME 会使秒数四舍五入到最接近的分钟数。

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2023-02-10
    • 2016-10-31
    • 2014-09-16
    相关资源
    最近更新 更多