由于Navicat开始付费才能使用,就改为dbEaver,但是这个工具有点奇怪的地方就是
Export数据表备份之后 会丢失主键,如果直接建表导入相关数据,自增设置等特殊配置
方案一:直接根据已有的id(导入的没有自增属性的表) 加上新的自增属性
alter table aaa drop column id
alter table aaa add id int identity(1,1)
遇到的问题是,系统中的菜单 权限等有关联的数据,id必须在三个环境test\uat\pro的数据库中保持一致,上述方法会导致 三个库的表id的值是顺序来增加,而不一定能保持跟原数据一致,如果原始数据中有id的行数据被删掉过,那肯定就跟新的自增id不一致了,
如果你对自增属性保持一致有要求,那么方案二肯定是比较适合了。
方案二: 可以保持id的原始值跟来源表一致,并且下次自增量一致
1、Export table 数据来源表——只有基础数据;
2、创建新表 有identity的属性;
-- 另外一种方式 先新建表 再导入数据
DROP TABLE basf_filte_keyword;
CREATE TABLE basf_filter_keyword (
id int IDENTITY(1,1) NOT NULL primary key,
keyword nvarchar(255) COLLATE Chinese_PRC_CI_AI NULL,
translation_en nvarchar(255) COLLATE Chinese_PRC_CI_AI NULL,
translation_jp nvarchar(255) COLLATE Chinese_PRC_CI_AI NULL,
create_time int NULL,
status tinyint NULL,
update_time int NULL,
create_by int NULL,
update_by int NULL
);
3、从目标表中导入相关数据
-- 取消序列的自增长的SQL语句
set identity_insert basf_resource on
insert into basf_resource (name, sort, parent_id, resource_type, url, resource_code, data_status, icon, update_date, create_date, id,function_type, name_zh, resource_module, name_jp)
select name, sort, parent_id, resource_type, url, resource_code, data_status, icon, update_date, create_date, id1, function_type, name_zh, resource_module, name_jp from basf_resource_pro_20220621 brp ;
set identity_insert basf_resource off
其他相关自增属性的小方法:
-- 查询当前表的自增id
SELECT IDENT_CURRENT('basf_resource ');
-- 重置当前表的最大自增id
dbcc checkident('basf_resource ',reseed,694);
希望dbEaver越做越好,可以复制粘贴对应的主键和自增属性,如果你有更好的办法了解决此问题,欢迎留言