注册 | 登录
欢迎注册会员

当前位置:首页 > 数据库 > MSSQL数据库 > 正文

一次性的把所有的表的数据全部删除

来源:程序人生 【 】 浏览:1848 添加日期:2010-08-12 10:59:41 我要评论(0)
表间建立关系和索引后用"TRUNCATE?TABLE?TableNmae"时提示:不能截断表,因为该表正由“FOREIGN?KEY约束引用”??
我若是想一次把所有的表的数据全部删除,应该怎么办?
1.exec?sp_MSForEachTable?'delete??'一值按,按到不报错为止就可以了?
2.sql2000企业管理器?
--右键要导出的数据库?
--所有任务?
--生成SQL脚本?
--<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题"选上?
--<设置格式>里,将"包含扩展属性",选上?
--<选项>中,将"表脚本选项"中的内容全部选择上?
--其他所有的选项保持默认值?
--然后确定,将其保存成一个.sql文件?
然后执行次文件重新建一个数据库?
3.倒入导出,选择导数据库对象,并取消勾选“复制数据”?
4.转贴:?
复制内容到剪贴板
  1. create?function?udf_GenLevelPath_Table()?? ??
  2. returns?@v_Result?table?(LevelPath?int,OName?sysname,type?varchar(8))?? ??
  3. /****************************************************************/?? ??
  4. /*?功能描述:按照依赖关系,列出数据库对象?*/?? ??
  5. /*?输入参数:无?*/?? ??
  6. /*?输出参数:按照依赖关系排列的数据库对象表,无依赖的在前?*/?? ??
  7. /*?编写:我?*/?? ??
  8. /*?时间:2003-9-9?*/?? ??
  9. /****************************************************************/?? ??
  10. as?? ??
  11. begin?? ??
  12. declare?@vt_ObjDepPath?table?(LevelPath?int,OName?sysname?null,?type?Varchar(8))?? ??
  13. declare?@vt_Temp1?table?(OName?sysname?null)?? ??
  14. declare?@vt_Temp2?table?(OName?sysname?null)?? ??
  15. declare?@vi_LevelPath?int?? ??
  16. ??
  17. set?@vi_LevelPath?=?1?? ??
  18. insert?into?@vt_ObjDepPath(LevelPath,OName,type)?? ??
  19. select?@vi_LevelPath,o.name,o.type?? ??
  20. from?sysobjects?o?? ??
  21. where?xtype?not?in?('S','X')?? ??
  22. ??
  23. insert?into?@vt_Temp1(OName)?? ??
  24. select?distinct?object_name(sysdepends.depid)?? ??
  25. from?sysdepends,@vt_ObjDepPath?p?? ??
  26. where?sysdepends.id?<>?sysdepends.depid?? ??
  27. and?p.OName?=?object_name(sysdepends.id)?? ??
  28. ??
  29. while?(select?count(*)?from?@vt_Temp1)?>?0?? ??
  30. begin?? ??
  31. set?@vi_LevelPath?=?@vi_LevelPath?+?1?? ??
  32. ??
  33. update?@vt_ObjDepPath?? ??
  34. set?LevelPath?=?@vi_LevelPath?? ??
  35. where?OName?in?(select?OName?from?@vt_Temp1)?? ??
  36. and?LevelPath?=?@vi_LevelPath?-?1?? ??
  37. ??
  38. delete?from?@vt_Temp2?? ??
  39. ??
  40. insert?into?@vt_Temp2?? ??
  41. select?*?from?@vt_Temp1?? ??
  42. ??
  43. delete?from?@vt_Temp1?? ??
  44. ??
  45. insert?into?@vt_Temp1(OName)?? ??
  46. select?distinct?object_name(sysdepends.depid)?? ??
  47. from?sysdepends,@vt_Temp2?t2?? ??
  48. where?t2.OName?=?object_name(sysdepends.id)?? ??
  49. and?sysdepends.id?<>?sysdepends.depid?? ??
  50. ??
  51. end?? ??
  52. ??
  53. select?@vi_LevelPath?=?max(LevelPath)?from?@vt_ObjDepPath?? ??
  54. ??
  55. update?@vt_ObjDepPath?? ??
  56. set?LevelPath?=?@vi_LevelPath?+?1?? ??
  57. where?OName?not?in?(select?distinct?object_name(sysdepends.id)?from?sysdepends)?? ??
  58. and?LevelPath?=?1?? ??
  59. ??
  60. insert?into?@v_Result?? ??
  61. select?*?from?@vt_ObjDepPath?order?by?LevelPath?desc?? ??
  62. return?? ??
  63. end?? ??
  64. go?? ??

--调用方法??
复制内容到剪贴板
  1. select?*?from?dbo.udf_GenLevelPath_Table()?where?type='U'?? ??
  2. go??

原来的函数没有把主键、视图等分开,我把它改写了一下,这样就可以取出你定义的用户表!?
然后再用游标处理就好了!?


最后的?PROCEDURE?应该这样:?

复制内容到剪贴板
  1. CREATE?PROCEDURE?sp_ClearUserTable?? ??
  2. AS?? ??
  3. DECLARE?@tablename?varchar(50)?? ??
  4. ??
  5. DECLARE?c_tablename?CURSOR?FOR?? ??
  6. select?OName?from?udf_GenLevelPath_Table()?where?type='U'?? ??
  7. OPEN?c_tablename?? ??
  8. FETCH?NEXT?FROM?c_tablename?INTO?@tablename?? ??
  9. WHILE?@@FETCH_STATUS=0?? ??
  10. BEGIN?? ??
  11. EXEC('DELETE?'?+?@tablename?)?? ??
  12. FETCH?NEXT?FROM?c_tablename?INTO?@tablename?? ??
  13. END?? ??
  14. CLOSE?c_tablename?? ??
  15. DEALLOCATE?c_tablename???

你浏览的文章是 - 《一次性的把所有的表的数据全部删除》!
文章出处:https://www.procedurelife.com/content/akkhll.html
0% (0)
0% (0)
评论0
头像 游客
1 2