Sql server 从包含日期/时间数据类型的Access表更新SQL Server表

Sql server 从包含日期/时间数据类型的Access表更新SQL Server表,sql-server,sql-server-2012,odbc,ms-access-2013,Sql Server,Sql Server 2012,Odbc,Ms Access 2013,我在将一些现有数据从Access后端表传输到SQL Server 2012后端表时遇到问题。我正在调整数据库的大小,因为我们的Access数据库依赖于我们的ERP软件中的表,而ERP软件也在SQL Server上,所以在SQL Server上运行所有查询并通过ODBC从SQL Server检索Access中的信息是有意义的 问题就在这里。当尝试将所有字段从Status T(Access Table)更新为dbo_Status T(SQL Server Table)时,仅当我省略日期/时间数据类型

我在将一些现有数据从Access后端表传输到SQL Server 2012后端表时遇到问题。我正在调整数据库的大小,因为我们的Access数据库依赖于我们的ERP软件中的表,而ERP软件也在SQL Server上,所以在SQL Server上运行所有查询并通过ODBC从SQL Server检索Access中的信息是有意义的

问题就在这里。当尝试将所有字段从Status T(Access Table)更新为dbo_Status T(SQL Server Table)时,仅当我省略日期/时间数据类型列时,它才起作用。当我在更新查询中引入日期/时间数据类型时,它说超过13000行无法更新,但最后它不会复制任何内容。如果我在查询中省略了日期/时间字段,那么其余的数据传输就很容易了

             ACCESS                                          SQL Server
Field Name             Data Type                  Column Name           Data Type
OrderID                Number                     OrderID               int
LoadID                 Number                     LoadID                int
StepNumber             Number                     StepNumber            smallint
InProgress             Yes/No                     InProgress            bit
Completed              Yes/No                     Completed             bit
TimeStamp              Date/Time                  TimeStamp             datetime
TimeStamp_Completed    Date/Time                  TimeStamp_Completed   datetime
据我所知,我的表两端都已正确设置,SQL Server中的datetime数据类型应与Access中的Date/Time数据类型配合使用

当我尝试将数据从access移到SQL Server时,access中出现以下错误

Microsoft Access didn't update 13243 field(s) due to a type conversion failure, 0, record(s) due to key violations, 0 record(s) due to lock violations, and 0 record(s) due to validation rule violations.
这是我的问题

UPDATE StatusT INNER JOIN dbo_StatusT ON (StatusT.StepNumber = dbo_StatusT.StepNumber) AND (StatusT.LoadID = dbo_StatusT.LoadID) AND (StatusT.OrderID = dbo_StatusT.OrderID) SET dbo_StatusT.Completed = IIf([StatusT].[Completed]=-1,1,0), dbo_StatusT.InProgress = IIf([StatusT].[InProgress]=-1,1,0), dbo_StatusT.[Timestamp] = [StatusT].[Timestamp], dbo_StatusT.Timestamp_Completed = [StatusT].[Timestamp_Completed];

由于SQL Server中的位表示,我已将“是/否”字段调整为使用1和0,但我无法解决日期/时间问题。OrderID、LoadID和StepNumber是两边都相同的字段,其余数据需要在SQL Server上更新

我建议将Access中的日期/时间转换为字符串-也许MS SQL能够读取以下内容:

UPDATE StatusT 
INNER JOIN dbo_StatusT  ON (StatusT.StepNumber = dbo_StatusT.StepNumber) 
                        AND (StatusT.LoadID = dbo_StatusT.LoadID) 
                        AND (StatusT.OrderID = dbo_StatusT.OrderID) 
SET dbo_StatusT.Completed = IIf([StatusT].[Completed]=-1,1,0), 
dbo_StatusT.InProgress = IIf([StatusT].[InProgress]=-1,1,0), 
dbo_StatusT.[Timestamp] = FORMAT([StatusT].[Timestamp], "yyyymmdd hh:mm:ss"), 
dbo_StatusT.Timestamp_Completed = FORMAT([StatusT].[Timestamp_Completed], "yyyymmdd hh:mm:ss");

我犯了一个愚蠢的大错。我对表做了一些更改,但我从未在Access中重新链接我的表。这意味着它仍然脱离了在MS SQL Server的上一个表配置中设置的数据类型。在我刷新表格的那一刻,一切都顺利进行。谢谢你的帮助