问题: 调整主建为自增、表内自关联的主建顺序
解答:
-- 想用外键的级联修改,但表内自关联的方式不支持级联修改、删除
-- 还有另外一个办法,先将外键删除,再用触发器实现级联更新,然后再添加外键
-- 第三种方式:对欲修改的表中加入一个自增列,将数据导入一个临时表
select *, identity(int, 1, 1) as id into #t
from A
/*---上面的语句应该写成如下,因为 A表的OID为自增字段,不能再直接加上 identity(int, 1, 1) as id1
select * into #tt1
from A
alter table #tt1 add id1 bigint
update #tt1
set id1 = OID
alter table #tt1 drop column OID
sp_rename '#tt1.id1', 'OID', 'column' -- 此处不能通过, 因为在当前数据库中是找不到 #tt1 表的,必须到 tempdb 下才能操作
select *, identity(int, 1, 1) as id1 into #t -- 此处只能用 select id1, vName...., identity(int, 1, 1) as id2 into #t from #tt1
from #tt1
drop table #tt1
---*/
select * from #t
-- 然后设置外键关联的转变,从依赖于OID,转变为依赖自增的ID
update #t
set lParent = t.id2
from
(
select t1.OID as id1, t1.lParent as lParent1, t2.id as id2
from #t as t1 join #t as t2 on t1.lParent = t2.OID
) as t
where t.id1 = #t.OID
select OID, lParent, id
from #t
-- 删除表中所有行,并且将自动增值的列初始为种子值
truncate table A
-- 插入调整了顺序的数据
insert into A(字段列表)
from #t
order by id
select *
from tFunctions
-- 完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?