truncate table 遇到的外键被使用问题解决方案。

在asp.net中操纵数据库,有时候要清空某张或者某些的表,但是这些表使用了外键,而且有的还用到了自增字段,希望清空之后能从1开始。百度谷歌之后小结一下,为以后理解和重复使用保留材料。


解决方案一:

1. 清空数据 
2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表 
3. 种子问题, 如果表存在种子重设为0, 如不存在就不操作 
4. 加了事务, 中间报错, 有后悔机会 
5. 截断日志功能, 因为使用delete, 删除后日志文件会增大, 可以不使用

 

 

以上代码只要在select rtrim(name) from sysobjects where type = 'U' order by crdate desc中添加过滤条件即可过滤一些表,我是改成,where type = 'U' and rtrim(name) in('IPControl','Student','Teacher_Course','Score','Paper','PaperDetail') order by crdate desc 这样使得in里面的表被清空,而数据库中其他表内容被保留下来。

 

==============================

在ASP.net中要直接使用这段代码会出问题,我猜想主要原因在于go这个词上。

 

解决方法就是将这一大片的代码分为若干个sql语句,然后顺次执行。另外,个人觉得也无需将所有的语句段都复制使用,选择自己需要的就可以了。

 

=============================

 

解决方案二:

 


 

 

 

 

都看不太懂,但是都挺有用的。以后如果有进步,再回头来好好理解。这当中也有一个对表进行过滤的地方,@command1= 'truncate table ?', @whereand=' and name not in(''Users'')'  我就设置了一个name not in(''Users'')'  ,结果运行之后只有Users表被保留下来,其他全部被清空。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值