注册 | 登录
欢迎注册会员

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

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

来源:程序人生 【 】 浏览:1895 添加日期: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