您的位置:首页 > 数据库

关于sql server动态获取数据库下所有表以及游标的简单使用

2015-05-07 21:49 495 查看
需求是这样的,在SQL SERVER中的Stock库下,有两千多张表。需要每张表都删除今天的一条错误数据。

首先得要得到所有表的名称,代码如下:

Select name FROM SysObjects Where XType='U' and name <>'InsertHistory' order BY Name ;


SysObjects是一张系统表,它会记录在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 如果对SysObjects比较敢兴趣的话,可转到我之前发布的文章,SQL Server中的系统表sysobjects使用方法,实现循环遍历所有表(转)

接下来是游标的使用。

在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。

想继续了解游标的,请转:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

用法请看我在下面的注释。

declare @tbName varchar(20);--定义游标每一行的数据临时变量
declare mycursor cursor  --定义一个全局游标,全局游标可直接赋值,但结尾必须手动释放掉。
for
Select name FROM SysObjects Where XType='U' and name <>'InsertHistory' order BY Name ;--为游标赋值赋值
open mycursor

fetch next from mycursor into @tbName; --第一行赋值给临时变量
while
@@FETCH_STATUS=0
begin
exec('delete from '+@tbName+' where datediff(day,[Time],getdate())=0;');
fetch next from mycursor into @tbname;
end
--关闭游标
close mycursor
--释放游标
deallocate mycursor


最后想对使用游标时提一些建议

如果能不用游标,尽量不要使用游标

用完用完之后一定要关闭和释放

尽量不要在大量数据上定义游标

尽量不要使用游标上更新数据

尽量不要使用insensitive, static和keyset这些参数定义游标

如果可以,尽量使用FAST_FORWARD关键字定义游标

如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐