上次更新时间:2020 年 1 月 23 日
问题
在 SQL Server 中创建指向包含标识列的表的链接时,Access 通常会将该列识别为自动编号列。
在 Office 365 和 Office 2016/2019 的 1912 版的当前频道内部版本 (16.0.12325.*) 中,不能正确识别标识列,反而是只会将其识别为数字。
这种情况发生在通过用户界面或代码创建新链接时,但仅限于新链接。 现有链接不会受到影响,除非对链接进行刷新。
Access 使用正确的标识列标识来实现许多用途,因此这可能会以多种方式影响应用程序。
例如,标识列通常用于标识新添加的记录。 如果未使用标识列,Access 可能无法正确找到新添加的行,这将导致该行中的字段显示为 #Deleted。
使用 RecordSet.LastModified 属性来检索上次添加的记录的值时,可能会看到类似的问题。 以下代码:
Set rst = CurrentDb().OpenRecordset("tblWithIdentityColumn")
rst.AddNew
rst!CompanyName = "Contoso"
rst.Update
rst.Bookmark = rst.LastModified
MsgBox rst!CompanyName
可能会导致错误 3167:
在这两种情况下,系统将成功添加记录,但是 Access 将无法成功找到该记录。
Access 通常还会忽略直接更新标识列的尝试。 但是,在这些内部版本中,它会允许进行尝试但却无法成功,并且会生成一条错误消息:
[SQL Server] 当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'tblOrders' 中插入标识列的显式值。(#544)
状态:已修复
版本 1912 现已提供此问题的修补程序。 可能需要显式强制更新以接收修补程序。 修复的内部版本号应为 12325.20344。
“预览体验计划 - 慢”(版本 2001)或“预览体验计划 - 快”(版本 2002)频道中尚未提供该修复程序, 如果你加入了这些频道,可能需要转到当前频道。
注意: 更改版本后,必须刷新任何受影响的链接,确保这些链接再次正常工作。