当前位置:   article > 正文

sql server清除所有表数据、避开触发器、存储、自增长值、三种方法_sqlserver去掉自增

sqlserver去掉自增

第一种方法:单表删除数据、只能一个表一个表删

  1. ALTER proc [dbo].[ClearSystem]
  2. as
  3. declare @name sysname,@sqlcommandText varCHAR(max),@int int
  4. set @sqlcommandText=''
  5. set @int=1
  6. declare mycur cursor for
  7. select name from sysobjects where xtype='U' and name not like 'System_*' order by name
  8. open mycur
  9. fetch next from mycur into @name
  10. while @@FETCH_STATUS=0
  11. begin
  12. set @sqlcommandText=@sqlcommandText+'truncate table '+@name +CHAR(13)
  13. set @int=@int+1
  14. if @int>200
  15. begin
  16. PRINT @sqlcommandText
  17. set @sqlcommandText=''
  18. set @int=1
  19. end
  20. fetch next from mycur into @name
  21. end
  22. close mycur
  23. deallocate mycur

上面的建个存储、下面是执行清除语句

truncate table  inv   --就能把inv表给清除掉

跟delete最大的区别、

1、就是delete只能删除数据、但是如果有触发器的话可能删除不了

2、如果有主键自增长值的话、就不能再从0开始了

第二种方法:清除所有的表数据、也有过滤某些表的条件

  1. declare c cursor for
  2. select NAME from sysobjects where xtype='U' and name not in ('sysclones','sysrowsets','sysrscols') --框里是过滤不用删除表数据的表名
  3. declare @t varchar(200)
  4. open c
  5. fetch next from c into @t
  6. while @@FETCH_STATUS=0
  7. begin
  8. exec('delete table '+@t)
  9. fetch next from c into @t
  10. end
  11. close c

上面代码也是先建个存储、直接复制代码执行、记的先过滤不用删除表数据的表名

第三种方法:清除所有的表数据、可以保留应用层的主体结构、但是可能针对特殊的应用如:ERP

  1. create proc [dbo].[clearSysData]
  2. as
  3. DECLARE @NAME VARCHAR(50),@SQLCOMMANDTEXT VARCHAR(200),@issqluser int
  4. declare @groupname varchar(100), @mem_col varchar(100)
  5. DECLARE CUR_TABLE CURSOR FOR
  6. SELECT NAME FROM SYSOBJECTS WHERE XTYPE='U' AND name NOT LIKE 'sys%' AND NAME NOT IN ('INV_TYPE','INVTYPE','ERPFILES') ORDER BY NAME
  7. OPEN CUR_TABLE
  8. FETCH NEXT FROM CUR_TABLE INTO @NAME
  9. WHILE @@FETCH_STATUS=0
  10. BEGIN
  11. SET @SQLCOMMANDTEXT='TRUNCATE TABLE '+@NAME
  12. EXEC(@SQLCOMMANDTEXT)
  13. FETCH NEXT FROM CUR_TABLE INTO @NAME
  14. END
  15. CLOSE CUR_TABLE
  16. DEALLOCATE CUR_TABLE
  17. declare CUR_USER CURSOR FOR
  18. SELECT name,issqluser FROM SYSUSERS WHERE name not in ('dbo','guest','INFORMATION_SCHEMA','sys') AND name<>'public' and name not like 'db_%'
  19. OPEN CUR_USER
  20. FETCH NEXT FROM CUR_USER INTO @name,@issqluser
  21. WHILE @@FETCH_STATUS=0
  22. BEGIN
  23. IF @issqluser=1
  24. BEGIN
  25. exec sp_revokedbaccess @name
  26. exec sp_droplogin @name
  27. END
  28. BEGIN
  29. set nocount on
  30. set @groupname=@NAME
  31. create table #SQLDMOTemp (role_col nvarchar(132) NOT NULL, mem_col nvarchar(132) NOT NULL, id_col nvarchar(176))
  32. insert into #SQLDMOTemp (role_col, mem_col, id_col)
  33. exec sp_helprolemember @groupname
  34. declare mem_cursor cursor for
  35. select mem_col from #SQLDMOTemp
  36. open mem_cursor
  37. fetch next from mem_cursor into @mem_col
  38. while @@fetch_status=0
  39. begin
  40. exec sp_droprolemember @groupname,@mem_col
  41. fetch next from mem_cursor into @mem_col
  42. end
  43. close mem_cursor
  44. deallocate mem_cursor
  45. drop table #SQLDMOTemp
  46. set nocount off
  47. exec sp_droprole @groupname
  48. END
  49. FETCH NEXT FROM CUR_USER INTO @name,@issqluser
  50. END
  51. CLOSE CUR_USER
  52. DEALLOCATE CUR_USER
  53. go
  54. exec clearSysData --执行存储

上面的是新建存储、后面的是执行存储、可以单独执行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/440726
推荐阅读
相关标签
  

闽ICP备14008679号