关于sql server动态获取数据库下所有表以及游标的简单使用
2015-05-07 21:49
495 查看
需求是这样的,在SQL SERVER中的Stock库下,有两千多张表。需要每张表都删除今天的一条错误数据。
首先得要得到所有表的名称,代码如下:
SysObjects是一张系统表,它会记录在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 如果对SysObjects比较敢兴趣的话,可转到我之前发布的文章,SQL Server中的系统表sysobjects使用方法,实现循环遍历所有表(转)
接下来是游标的使用。
在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。
想继续了解游标的,请转:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html
用法请看我在下面的注释。
用完用完之后一定要关闭和释放
尽量不要在大量数据上定义游标
尽量不要使用游标上更新数据
尽量不要使用insensitive, static和keyset这些参数定义游标
如果可以,尽量使用FAST_FORWARD关键字定义游标
如果只对数据进行读取,当读取时只用到FETCH NEXT选项,则最好使用FORWARD_ONLY参数
首先得要得到所有表的名称,代码如下:
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参数
相关文章推荐
- 关于动态获取设置像素大小以及TypedValue.applyDimension()的使用
- 关于Java Web使用的DataTables插件获取所有数据以及表格刷新
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net
- NGUI FontMaker 简单使用,以及在文字源文件丢失的情况下,怎么根据UIFont预制获取全部文字
- 数据库sql server安装使用遇到的问题以及解决方法
- NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
- SSH框架数据库操作中session的获取以及本地sql的使用
- Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址
- Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址
- 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)
- 使用JDBC对数据库进行查询的前期准备工作,以及简单的JDBC访问MySQL数据库(Mac)
- 关闭SQL Server 数据库所有使用连接
- Sql Server游标使用 exec函数执行动态sql
- 使用JDBC获取各数据库的Meta信息——表以及对应的列
- 获取SQL SERVER某个数据库中所有存储过程的参数
- SQL SERVER如何获取指定数据库中所有存储过程的参数
- SQL Server 动态生成数据库所有表Insert语句
- SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句