• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQLServer2005的Top功能

mysql 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论

所有人都知道select top 的用法,但很多人还不知道update top 和 delete top 怎么用。以往的做法是set rowcount来指定,其实SQL2005中对于Top语句的增强除了参数化之外还包括对update和delete的支持,但可惜的是还不支持自定义的order by列。如果要自定义派

所有人都知道select top 的用法,但很多人还不知道update top 和 delete top 怎么用。以往的做法是set rowcount来指定,其实SQL2005中对于Top语句的增强除了参数化之外还包括对update和delete的支持,但可惜的是还不支持自定义的order by列。如果要自定义派序列可以借助CTE.对于CTE的任何更改都会影响到原始表。

我们看下面的测试代码。

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 本文来源gaodai#ma#com搞@@代~&码*网2tag
———– ———- ———–
1 a 1
2 b 1
3 c 0
4 d 0
5 e 0
*/
update top(2) tb 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

如果你感兴趣的话可以自己先思考一下,我给一个提示:

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

如果你想不出来,请参考后面一篇文章,如果你写出来了,那也和我写的比较一下吧:p


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SQLServer2005的Top功能

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址