这似乎是一项简单的任务,但我失败了,并没有找到解决我的问题的方法:我在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中的文本并重试,但这可能不是唯一的解决方案。
任何帮助?
由于 迈克尔
答案 0 :(得分: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
,然后是FROM
和INNER JOIN
......