如何暂时清空一个主键表中的数据?

时间:2021-07-09 12:33:39
我有一个表A,它的主键是库中很多其他表的外键。我想用正式网的数据去更新测试网的表A,为了数据能完全同步,我想先把测试网中A的数据全部清空,然后再把正式网中A的数据导进来。但由于在A身上有很多外键约束,所以我根本无法删除里面的数据。我能想到的方案有两个,但都不知道具体的正确做法,烦请大家执教:
(1)把A身上的外键约束全部都删除,清空数据,再重新建立约束。这个做法的问题是,我没法很容易的获得所有A身上的外键约束的创建脚本(超过20个外键约束,所以手工做是不现实的)。我可以导出这个库里的所有外键约束,然后用搜索的方式找出其中和A相关的,但这也比较麻烦。不知道有没有什么方式可以很容易的得到所有和A相关的约束创建脚本?
(2)暂时关闭数据库的约束检测功能,等我清空了数据之后再恢复,不知道sqlserver有没有提供这样的命令?

6 个解决方案

#1


http://topic.csdn.net/t/20030623/11/1946111.html

#2


你的这种操作本来就是违反数据库的安全性的,应该进行级联删除; 
1:如果表中主键值一样,可以用更新处理,不一定要用删除再增加..
2:如果主表新增加数据的主键值与旧数据不一致的话,外键表的数据找不到对应的主键值,他们之间是无法关联的

#3


查询表所有外键信息
 
EXEC sp_fkeys  N'表名称'

#4


老项,你的名字还真恶啊,呵呵

刚才衣大侠给的那个链接
http://www.csdn.net/develop/Article/27/27055.shtm
里头给了个存储过程,对于这个问题我觉得是正解。

to影子:
你说的很对啊,这样的操作确实应该分成更新、级联删除、插入这三个步骤来完成,这可能是最正规的方法。多谢!

#5


哎呀,多谢影子兄,这正是我想要的阿 ^_^

#6


^_^

#1


http://topic.csdn.net/t/20030623/11/1946111.html

#2


你的这种操作本来就是违反数据库的安全性的,应该进行级联删除; 
1:如果表中主键值一样,可以用更新处理,不一定要用删除再增加..
2:如果主表新增加数据的主键值与旧数据不一致的话,外键表的数据找不到对应的主键值,他们之间是无法关联的

#3


查询表所有外键信息
 
EXEC sp_fkeys  N'表名称'

#4


老项,你的名字还真恶啊,呵呵

刚才衣大侠给的那个链接
http://www.csdn.net/develop/Article/27/27055.shtm
里头给了个存储过程,对于这个问题我觉得是正解。

to影子:
你说的很对啊,这样的操作确实应该分成更新、级联删除、插入这三个步骤来完成,这可能是最正规的方法。多谢!

#5


哎呀,多谢影子兄,这正是我想要的阿 ^_^

#6


^_^