SQL如何删除多余数据行的存储过程实例
2011-11-10 12:17
585 查看
1. --缘由:要把数据库给别人,但每表中的纪录最多只想给3条,于是要删除多余数据行
2. --注意:为避免数据参照导致删除出问题,建议先删除原有外键。
3. --存储过程spDeleteData,删除表名参数所对应的表的纪录,最多保留3条纪录
4. --set rowcount 、动态SQL、全局临时表的应用
5.
6. create proc spDeleteData(@tn nvarchar(30)) as
7. begin
8. set nocount on
9. if object_id('tempdb..##t') is not null drop table ##t
10. exec('select count(*) cnt into ##t from ' + @tn)
11. declare @row int
12. select @row=cnt from ##t
13. if @row>3
14. begin
15. set @row=@row-3
16. set rowcount @row
17. exec('delete from ' + @tn)
18. set rowcount 0
19. end
20. end
21.
22. go
23.
24. --存储过程spDeleteDataByTableName,调用spDeleteData删除数据库中所用表的纪录,每表最多保留3条纪录
25. --set rowcount 、while循环、局部临时表的应用
26.
27. create proc spDeleteDataByTableName as
28. begin
29. if object_id('tempdb..#t') is not null drop table #t
30. select [name] into #t from sysobjects where type='u'
31. declare @tn nvarchar(30)
32. set rowcount 1
33. select @tn=[name] from #t
34. while @@rowcount>0
35. begin
36. exec spDeleteData @tn --嵌套调用存储过程spDeleteData
37. select @tn=[name] from #t
38. delete from #t
39. end
40. set rowcount 0
41. end
42.
43. go
44.
45. exec spDeleteDataByTableName--调用存储过程spDeleteDataByTableName
2. --注意:为避免数据参照导致删除出问题,建议先删除原有外键。
3. --存储过程spDeleteData,删除表名参数所对应的表的纪录,最多保留3条纪录
4. --set rowcount 、动态SQL、全局临时表的应用
5.
6. create proc spDeleteData(@tn nvarchar(30)) as
7. begin
8. set nocount on
9. if object_id('tempdb..##t') is not null drop table ##t
10. exec('select count(*) cnt into ##t from ' + @tn)
11. declare @row int
12. select @row=cnt from ##t
13. if @row>3
14. begin
15. set @row=@row-3
16. set rowcount @row
17. exec('delete from ' + @tn)
18. set rowcount 0
19. end
20. end
21.
22. go
23.
24. --存储过程spDeleteDataByTableName,调用spDeleteData删除数据库中所用表的纪录,每表最多保留3条纪录
25. --set rowcount 、while循环、局部临时表的应用
26.
27. create proc spDeleteDataByTableName as
28. begin
29. if object_id('tempdb..#t') is not null drop table #t
30. select [name] into #t from sysobjects where type='u'
31. declare @tn nvarchar(30)
32. set rowcount 1
33. select @tn=[name] from #t
34. while @@rowcount>0
35. begin
36. exec spDeleteData @tn --嵌套调用存储过程spDeleteData
37. select @tn=[name] from #t
38. delete from #t
39. end
40. set rowcount 0
41. end
42.
43. go
44.
45. exec spDeleteDataByTableName--调用存储过程spDeleteDataByTableName
相关文章推荐
- AAA如何插入几十万条数据 PL/SQL 调试存储过程简单实例
- 在存储过程中如何使用另一个存储过程返回的结果集SQL实例
- 存储过程定义以及如何用SQL写一些存储过程实例
- .Net下批量删除数据的存储过程问题(用动态SQL )
- 【ORACLE】删除表数据的存储过程backup.sql
- 存储过程执行删除重复数据、动态执行sql、拼接sql
- SQL的数据存储过程如何使用?
- 点滴积累【other】---存储过程删除所有表中的数据(sql)
- sql生成(插入、修改、删除数据的存储过程)代码的存储过程
- sql的存储过程实例--动态根据表数据复制一个表的数据到另一个表
- sql存储过程通过ID删除两表中的数据。
- sql 创建多表删除的存储过程
- SQL存储过程之删除指定表中指定字段所有约束
- 校验表中数据是否有循环编码的通用存储过程.sql
- mssql 生成‘批量Insert数据的sql语句’的存储过程
- 执行SQL存储过程实例
- T-SQL排序,重复数据的剔除保留,分页存储过程
- 验证选择每日学习总结:DropDownList是否已选择验证、存储过程参数为sql字符串问题、将截断字符串或二进制数据。\r\n语句已终止
- sql存储过程 1查询;2插入;3更新;4删除
- SQL存储过程动态查询数据区间