修改数据库中表的id 50
数据库中有二三十张表,而且关系错中复杂,比如这表id是那表的外键,那表id又是另外一张表的外键。而且这些表里面都有上万的数据记录。现在我要修改这些表的主键(id)生成方式...
数据库中有二三十张表,而且关系错中复杂,比如这表id是那表的外键,那表id又是另外一张表的外键。而且这些表里面都有上万的数据记录。现在我要修改这些表的主键(id)生成方式,但修改后这些表的关系不能错乱,那上万条数据通过主外建建立的关系也不能发生错乱。这要怎么实现????
以前的数据的id值也要换 展开
以前的数据的id值也要换 展开
4个回答
展开全部
思路:
1、首先搞清楚所有表的主外键关系
2、取消全部表的主键自增标识列,方便你后续的直接修改ID
例如:
exec sp_configure 'allow updates',1
reconfigure with override
GO
----取消标识列标记
update syscolumns set colstat = 0 where id = object_id('表名') and colstat = 1
GO
----恢复标识列标记
update syscolumns set colstat = 1 where id = object_id('表名') and name = '标识列名称'
3、写个SQL脚本,修改ID,在修改的时候,一并更新全部表里的此ID值
例如:
declare @old_id as int,@new_id as int
select @old_id=12,@new_id=123
update 表名1 set id=@new_id where id=@old_id
update 表名2 set id=@new_id where id=@old_id
update 表名3 set id=@new_id where id=@old_id
.....
update 表名n set id=@new_id where id=@old_id
追问
不是这种,没考虑到数据关系
展开全部
你是要修改数据库里面, 某个表的 自动递增列的 开始id ?
那你那个表里面, 当前有没有数据?
如果已经有数据了, 你再从1开始, 那后面就要出错了。
如果表是空表, 没有数据的, 那么可以
TRUNCATE TABLE 表名字
通过彻底清空 指定表的方式, 来重置那个 自动递增的当期值为 1
注:以上处理方式
对于 SQL Server 数据库的 identity (1,1)
或者 MySQL 的 AUTO_INCREMENT 是有效的。
如果是 Oracle 数据库的话, 你可能需要去重新创建序列号对象。
那你那个表里面, 当前有没有数据?
如果已经有数据了, 你再从1开始, 那后面就要出错了。
如果表是空表, 没有数据的, 那么可以
TRUNCATE TABLE 表名字
通过彻底清空 指定表的方式, 来重置那个 自动递增的当期值为 1
注:以上处理方式
对于 SQL Server 数据库的 identity (1,1)
或者 MySQL 的 AUTO_INCREMENT 是有效的。
如果是 Oracle 数据库的话, 你可能需要去重新创建序列号对象。
追问
我要修改所有表的id,但也不是递增值得问题,我是要把所有表的id全部都换掉,但不影响数据记录之间通过主外键建立的关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
解决了吗?我也遇到了这样的问题?解决了可以告诉我下吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询