欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

SQL基础教程及代码优化(五)

创建时间:2011年06月23日 21:38  阅读次数:(5157)
分享到:
游标的作用域
–Local:局部。
–Global:全局。在由连接执行的任何存储过程或批处理中,都可应用该游标名称。

操作游标
–定义游标:Declare <CursorName > cursor
–打开游标:Open <CursorName >
–从结果集返回行:Fetch <CursorName > Into <variable_name >
–关闭游标:Close <CursorName >
–销毁游标:Deallocate <CursorName >

动态创建游标
Declare @rowcount int
Exec('declare cur_test cursor global for select count(*) from storage_kcaccount')
Open cur_test
Fetch cur_test into @rowcount
print convert(varchar(10),@rowcount)
Close cur_test
Deallocate cur_test
  
使用游标变量
Declare @rowcount int
Declare @cur_test cursor
Set @cur_test = cursor for select count(*) from storage_kcaccount
Open @cur_test
Fetch @cur_test into @rowcount
print convert(varchar(10),@rowcount)
Close @cur_test
Deallocate @cur_test
  
3.3 SQL Server 2005表变量
定义表变量
Declare @t_user Table(UserId int,UserName varchar(20))

表变量的优点
–表变量的行为类似于局部变量,有明确定义的作用域 ,在定义表变量的函数、存储过程或批处理结束时,会自动清除此变量 ;
–table 类型声明中的 CHECK 约束、DEFAULT 值和计算列不能调用用户定义函数 ;
–在存储过程中使用 table 变量与使用临时表相比,减少了存储过程的重新编译量 ;
–涉及 table 变量的事务只在 table 变量更新期间存在。因此减少了 table 变量对锁定和记录资源的需求 。

表变量的缺点
–包含表变量的查询不会生成并行查询执行计划。特大型表变量或者复杂查询中的表变量可能会影响到性能。在这种情况下,请考虑改用临时表。

4.视图优化
4.1.对视图的操作比直接对表操作要慢,应尽量避免在大数据量的表上建立视图
4.2.尽量不要使用嵌套视图
4.3.在视图中连接多个表时,会影响性能
4.4.可以考虑使用存储过程代替视图检索大型表数据
4.5.索引视图(With SCHEMABINDING)
4.6.分区视图
  
4.1索引视图  
索引视图是对视图创建聚集索引必须满足的条件,也就是说只有索引视图才能创建聚集索引。
–当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。
–要执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。
–视图不能引用任何其他视图,只能引用基表。
–视图引用的所有基表必须与视图位于同一数据库中,并且所有者也与视图相同。
–必须使用 SCHEMABINDING 选项创建视图。架构绑定将视图绑定到基础基表的架构。
–必须已使用 SCHEMABINDING 选项创建了视图引用的用户定义函数。
–表和用户定义函数必须由视图中由两部分组成的名称引用。不允许由一部分、三部分和四部分组成的名称引用它们。
–视图中的表达式引用的所有函数必须是确定的。
–如果视图定义使用聚合函数,SELECT 列表还必须包括 COUNT_BIG (*)。
–用户定义函数的数据访问属性必须为 NO SQL,外部访问属性必须是 NO。
–公共语言运行时 (CLR) 函数只能显示在视图的 SELECT 列表中,并且只能引用不属于聚集索引键的字段。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 60+23=? 的结果(结果是:83)
结  果: