【问题标题】:Inserting date from Access DB into SQL Server 2008R2将 Access DB 中的日期插入 SQL Server 2008R2
【发布时间】:2016-04-19 10:46:33
【问题描述】:

这似乎是一项简单的任务,但我失败了,并且没有找到解决我的问题的方法:我在 Access 2010 中有一个带有日期/时间列的本地表,我想更新 SQL Server 表中的列数据类型date

将日期/时间值直接发送到 SQL Server 表失败,与使用此 VBA 函数转换日期/时间列相同:

Function DateForSQL(dteDate) As String
DateForSQL = "'" & Format(CDate(dteDate), "yyyy-mm-dd") & "'"
End Function

给了

DateForSQL(Date()) = '2016-01-14'

我认为应该可以工作。

更新命令是这样的:

UPDATE SQL_table 
INNER JOIN local_table ON SQL_table.ID = local_table.ID 
SET SQL_table.DateField = DateForSQL(local_table.DateField)

但它在 Access 中再次失败并出现类型转换错误。

即使将 SQL Server 表列更改为 datetime,我也会遇到同样的错误。

向 SQL 发送类似“14/01/2016”或“01/14/2016”的字符串也是如此。

我唯一能做的——最终——就是在 Access 中将日期时间更改为文本并重试,但这不是唯一的解决方案。

有什么帮助吗?

谢谢 迈克尔

【问题讨论】:

    标签: sql-server vba datetime ms-access-2010


    【解决方案1】:

    首先,我建议您的日期使用 ISO-8601 格式 - YYYYMMDD(没有破折号,什么都没有) - 这适用于 SQL Server 中的所有区域和语言设置.

    接下来,我不确定 Access 的 SQL 语法,但在 SQL Server 中,您的 UPDATE 语句将是这样的:

    UPDATE sql
    SET sql.DateField = DateForSQL(local_table.DateField)
    FROM local_table local 
    INNER JOIN SQL_table sql ON local.ID = sql.ID 
    

    首先是UPDATE,然后是SET,然后是FROMINNER JOIN ...

    【讨论】:

    • 谢谢。访问语法是正确的,但即使更改为 ISO-8601 DateForSQL = "'" & Format(CDate(dteDate), "yyyymmdd") & "'" 它也会再次失败。但是您指导了我正确的方法:我找到了将 UPDATE 字符串更改为 .....SET SQL_table.DateFiled= Format(local_table.DateField,"yyyymmdd") 的解决方案,谢谢,问题解决了!迈克尔
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多