我公司使用SQL Server数据库,Access作为前端。服务器上最大的表之一称为tbl_Contacts。主键“ContactID”被设置为自动递增的“int”数据类型。原来昨天下午,“int”类型的限制用完了,没有新的联系人可以添加到表中。
首先我尝试将数据类型更新为“bigint”,但Access无法识别数据类型,并显示“联系人”表格中所有字段的“已删除”。
我阅读了大量不同的文章,并意识到Access 2010无法理解bigint数据类型,并且我需要将该字段转换为Access可以理解的其他类型。
我最终创建了一个tbl_Contacts视图,并使用此SQL修改了ContactID字段,包括表格中的所有其他字段。
CAST(ContactID AS Decimal(15, 0)) AS ContactID
然后我将Access中的旧链接表重命名为tbl_Contacts_OLD,使用ODBC连接将新的ContactsView表添加到Access中,并将View重命名为“tbl_Contacts”。
我认为一切正常,因为我可以再次向表中添加新记录,但事实证明有些事情仍然无效。
我唯一可以想象的是,我的数据库中的其他表期望“ContactID”是“长整数”,并且他们不喜欢它是“十进制”。 < / p>
当我尝试使用将数据添加到表“tbl_CallLog”(链接到“tbl_Contacts”)的表单时,我收到此错误。
运行时错误'3101' MS Access数据库引擎无法在表'tbl_Contacts'中找到记录,其中包含密钥匹配字段'ContactID'
我应该投射到Access 2010可以识别和使用的其他数据类型吗?是否可能需要执行一个步骤,可能将十进制值转换为Access中的另一种数据类型?
我是否需要在引用原始Contacts表的所有其他表上转换数据类型,以便它们的链接字段现在是十进制数据类型?
答案 0 :(得分:0)
BigInt 。
记录ID的数据类型应为 Long 或 GUID 。 Long 是迄今为止最常用的。
答案 1 :(得分:0)
所以这不是世界上最好的解决方案,但我最终解决了我的问题。
我的tbl_Contacts表中只有99k记录,但由于种种原因,而且表格已有20年历史,IDENTITY SEED的数量已超过2亿,这是&#34; int&#34;数据类型。我查看了ID并找到了120k数字的间隙,因此我使用此查询重置了种子值。
DBCC CHECKIDENT(&#39; [tbl_Contacts]&#39;,RESEED,-92801); GO
我现在已经创建了多个测试联系人,第一个的ID号为-92800。
这应该让我感到高兴,直到我能在今年年中建立一个新的CRM系统。
感谢Gustav的评论。