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

相關文章
相關標籤/搜索