SQLServer的Top功能

全部人都知道select top 的用法,但不少人还不知道update top 和 delete top 怎么用。以往的作法是set rowcount来指定,其实SQL2005中对于Top语句的加强除了参数化以外还包括对update和delete的支持,但惋惜的是还不支持自定义的order by列。若是要自定义派序列能够借助CTE.对于CTE的任何更改都会影响到原始表。ide

 

      咱们看下面的测试代码。测试

 

set  nocount  on

use  tempdb
go

if (object_id ('tb' ) is  not  null )
    drop  table  tb
go
create  table  tb (id  int  identity (1 , 1 ), name  varchar (10 ), tag  int  default  0 )

insert  into  tb (name ) select  'a'
insert  into  tb (name ) select  'b'
insert  into  tb (name ) select  'c'
insert  into  tb (name ) select  'd'
insert  into  tb (name ) select  'e'


/*--更新前两行
id          name       tag
----------- ---------- -----------
1           a          1
2           b          1
3           c          0
4           d          0
5           e          0
*/
update  top (2tb  set  tag = 1
select  *  from  tb

/*--更新后两行
id          name       tag
----------- ---------- -----------
1           a          1
2           b          1
3           c          0
4           d          1
5           e          1

*/
;with  t  as
(
    select  top (2 ) *  from  tb  order  by  id  desc
)
update   t  set  tag = 1
select  *  from  tb

/*--***前两行
id          name       tag
----------- ---------- -----------
3           c          0
4           d          1
5           e          1
*/
delete  top (2 ) from  tb
select  *  from  tb

/*--***后两行
id          name       tag
----------- ---------- -----------
3           c          0
*/
;with  t  as
(
    select  top (2 ) *  from  tb  order  by  id  desc
)
delete  from   t  
select  *  from  tb

set  nocount  off
spa

 

我会在下一篇文章中介绍一个应用,就是不少人关心的如何独占查询(就是一条数据只被一个终端select到)。.net

 

若是你感兴趣的话能够本身先思考一下,我给一个提示:blog

SQLServer2005有一个关键字Output,它能够将更改和插入的数据输出,咱们配合update top就能够模拟出来一个相对高效的独占查询的事物。此功能适合用在并行的任务处理或者消费中。get

 

http://blog.csdn.net/jinjazz/article/details/4520749it

相关文章
相关标签/搜索