在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表被保留下来,其他全部被清空。