Sql Server2005 Transact-SQL 新兵器学习总结之-TOP 运算符
TOP 运算符介绍: TOP 运算符的几个使用总结: 请看例题: 执行下面的语句: 结果如下: 结果如下: 结果如下: 我们可以看到,在Sql Server2005中top后面跟的可以是变量了,而在Sql Server2000中必须是常量才可以 希望上面提到的知识对你有所提示
TOP 运算符在Sql Server2005得到了增强,可以使用任何数值表达式(如变量名),而不是仅使用整数来指定该运算符返回的行数。
TOP 现在还可以在 INSERT、UPDATE 和 DELETE 语句中指定。
1.TOP 表达式可用在 SELECT、INSERT、UPDATE 和 DELETE 语句中。
2.Top表达式可以是常量,变量,子查询
3.取代set rowcount,可以防止锁升级,提高效率
特别提示:
与INSERT、UPDATE 或 DELETE 一起使用的 TOP 表达式中被引用行将不按任何顺序排列。
TOP n 随机返回 n 行。
例如,下面的 INSERT 语句包含 ORDER BY 子句,但该子句并不影响由 INSERT 语句直接引用的行。
有1个test表,表结构和表中数据如下:
select * from test
id salary manid
100 6500 100
200 5500 200
101 6600 100
102 6200 100
103 5100 100
104 6700 100
201 5800 200
202 4200 200
INSERT TOP (2) INTO @t
SELECT id, salary, manid
from test
ORDER BY salary asc
select * from @t
id salary manid
100 6500 100
200 5500 200
上个查询中的 ORDER BY 子句仅引用嵌套 SELECT 语句返回的行。
INSERT 语句选择 SELECT 语句返回的任意两行。
若要确保插入 SELECT 子查询返回的前两行,可以按如下写该查询。
INSERT INTO @t
SELECT TOP (2) id, salary, manid
from test
ORDER BY salary asc
select * from @t
id salary manid
202 4200 200
103 5100 100
TOP 运算符在Sql Server2005得到了增强,Top表达式可以是常量,变量,子查询
下面我们再来看另个例题:
[no] int ,
n nvarchar(100)
)
insert into test2([no],n)
select 1,'a'
union
select 2,'b'
union
select 3,'c'
union
select 3,'c2'
union
select 2,'b2'
union
select 2,'b3'
go
select *
from test2
order by [no] asc
go
结果如下:
no n
1 a
2 b
2 b2
2 b3
3 c
3 c2
1.利用top变量,筛选no最小的2行
declare @i int
select @i = 2
select top (@i) *
from test2
order by [no] asc
go
no n
1 a
2 b
要在Sql Server2000实现上述功能比较麻烦,需要用到动态sql语句,请看下面代码:
declare @i int
select @i = 2
declare @sql nvarchar(255)
select @sql=''
select @sql='select top ('+ convert(nvarchar(100),@i)+') * from test2 order by [no] asc'
exec(@sql)
2.利用top子查询来筛选
from test2
order by [no] asc
go
结果如下:
no n
1 a
2 b
3.WITH TIES参数:
指定从基本结果集中返回更多的行,返回的行与TOP n (PERCENT) 行中的最后一行在ORDER BY 列中具有相同的值。
只有在指定ORDER BY 子句之后才能指定TOP WITH TIES。
select top (2) WITH TIES *
from test2
order by [no] asc
go
2007年12月3日16:51:15
当然欢迎交流和指正
blog:
http://www.cnblogs.com/aierong
author:aierong
email:aierong@126.com