Revit项目数据导出至SQL数据库时覆盖原有记录如何解决
问题根因
- 导出逻辑使用了
INSERT OR REPLACE/全表清空后插入的操作,未区分不同Revit项目的归属 - 数据库表未设置项目维度的唯一标识,不同项目的同ID构件会触发主键/唯一键约束,触发旧记录覆盖逻辑
修复步骤
1. 调整数据库表结构
- 新增
revit_project_uid字段,类型设为VARCHAR(64),取值为Revit项目原生的ProjectInfo.UniqueId属性,该值为Revit自动生成的全局唯一ID,无需手动维护不会出现重复 - 调整表的主键规则,将
revit_project_uid+ 原业务主键(如构件IDelement_id)设置为联合主键,从结构上避免不同项目的同业务ID数据互相覆盖 - 若需要保留同个项目的多版本导出记录,可额外新增
export_time字段存储导出时间戳,联合主键调整为revit_project_uid+export_time+ 原业务主键即可
2. 修改数据导出逻辑
- 废弃全表清空后插入的逻辑:如果不需要保留同项目的历史版本,每次导出前先执行语句
DELETE FROM 目标表名 WHERE revit_project_uid = '当前导出项目的唯一ID',仅清理当前项目的旧记录,再执行INSERT写入新数据,不会影响其他项目的已有记录 - 如果需要保留历史版本,直接去掉删除逻辑,每次导出执行纯
INSERT操作即可
3. 功能验证
- 依次导出2个不同的Revit项目,执行
SELECT COUNT(*) FROM 目标表名核对总记录数为两个项目的记录数之和,确认无覆盖 - 重新导出其中一个项目,核对该项目数据更新为最新版本,另一个项目的记录无变动
内容的提问来源于stack exchange,提问作者toadgs
相关产品推荐
相关产品推荐

