标签归档:sql

mssql sqlserver 只进游标和滚动游标说明


摘要:
下文讲述sqlserver中只进游标和滚动游标,如下所示:
实验环境:sql server 2008 R2


默认情况下,创建游标为只进游标。
只进游标:从第一行依次读取至最后一行,只可使用fetch next依次读取下一行,不支持跳跃读取
不支持向后读取。

只进游标的缺点:当游标读取过的数据被update 操作过,此时由于游标不支持向后读取,所以无法重新读取数据
,获取修改后的值。

 ---定义游标需使用的临时变量
     declare @a int
     declare @b varchar(60)
      
     ---定义只进游标,并将游标赋值
     declare testCursor cursor  fast_forward for 
        select a,b from test 
        order by a asc 
        for read only 
    
     --打开游标
     open  testCursor 
     ---循环游标 
     while 0=0 
     begin
      ---读取游标中的数据
      fetch next   ---读取下一行
          from testCursor
       into @a,@b 
      
       if @@fetch_status <> 0 
        begin 
           break   ---退出while 循环
        end 
         ---输出或操作变量
         print @a 
         print @b 
      end 

     close testCursor              ---关闭游标
     deallocate testCursor       ---释放游标

滚动游标:
滚动游标同只进游标最大的不同之处在于,滚动可以跳跃或指定行进行游标中数据的获取,
滚动游标支持多种fetch读取方式,如下表所示:
滚动游标:
滚动游标的创建方法,在cursor前加入”scroll”关键字即可

     ---定义滚动游标
     declare testCursor   scroll  cursor for 
        select a,b from test 
        order by a asc 
        for read only  
fetch next

读取当前行的下一行
fetch prior

读取当前行的前一行
fetch first

读取游标中的第一行
fetch last

读取游标中的最后一行
fetch absolute n(n为一个整数常量)

n=0 不返回任何行
n >0 返回从游标中第n行
n<0 返回从游标尾部开始的第n行
fetch relative n(n为一个整数常量)

n=0 不返回任何行
n >0 返回从当前行开始的第n行
n<0 返回从当前行开始的之前的第n行

 ---定义游标需使用的临时变量
     declare @a int
     declare @b varchar(60)
      
     ---定义滚动游标,并将游标赋值
     declare testCursor  scroll cursor  for 
        select a,b from test 
        order by a asc 
        for read only 
    
     --打开游标
     open  testCursor 
      
      fetch next   ---读取游标中的下一行
          from testCursor
       into @a,@b 
       ---输出变量 
         print @a 
         print @b 


      fetch last    ---读取游标中的最后一行
          from testCursor   into @a,@b 
       ---输出变量 
         print @a 
         print @b 


      fetch prior    ---读取游标当前行的前一行
          from testCursor   into @a,@b 
       ---输出变量 
         print @a 
         print @b 


    fetch absolute 2     ---读取游标中的第二行
          from testCursor   into @a,@b 
      
     
    fetch relative 2     ---读取当前行的第二行
          from testCursor   into @a,@b  



     close testCursor              ---关闭游标
     deallocate testCursor       ---释放游标

mssql sqlserver truncate table 关键字的原理分享


摘要:
下文讲述truncate table 关键字的原理,如下所示:
实验环境:sql server 2008 R2



truncate 关键字简介

truncate 关键字功能:truncate关键字是删除数据表中所有内容的sql脚本。

  ---truncate table 用法如下:
 truncate table [表名]

truncate table 删除表内容的速度非常快,效率非常高,在功能上truncate table同不带where 条件的delete语句功能相同,
二者都是删除表中全部行,
————————————————
truncate table 同delete关键字对比
1. truncate table 比delete 速度快,truncate 占用少量的事务日志
2. 由于truncate table 产生较少的事务日志,所以此操作需谨慎,一旦出错,将不可逆转
3. truncate table将会重置标识列
4.对于存在“外键”的表,无法使用truncate table操作
5.truncate table无法产生日志,所以此操作不会触发delete触发器
————————————————

truncate table 删除数据的原理:
truncate table 删除数据的原因,是将数据表中数据所对应的数据页信息关联释放掉,并且事务日志中只记载页释放的信息

举例说明

 create table [maomao]
(keyId int identity,
 info varchar(30))
 go
 
 insert into [maomao]
 (info)values(N'sql教程'),
 ('sqlblog'),(N'sql爱好者')
 go
 
 

---表所在页查看
DBCC IND('test',maomao,-1)
go

truncate table maomao
go
---表所在页查看
DBCC IND('test',maomao,-1)
go

drop table maomao

mssql sqlserver 视图重命名的方法分享


摘要:
下文讲述视图的重命名的方法,如下所示:
实验环境:sql server 2008 R2


例:

   -----sp_rename语法说明:
   sp_rename  '参数1','参数2','类型'
   ----------参数说明--------
   参数1:
       原对象名称
   参数2:
       新对象名称
   类型:
       待变更对象类型。
        column:列变更
        database:数据库名称变更
        index:索引名称变更
        userdatatypes:用户自定义数据类型和clr用户自定义类型的变更
        object:所有sys.objects中跟踪的类型
  ------------------------例------------------------
   exec sp_rename 'dbo.vw_test','dbo.vw_newView'