数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQLServer 2008中SQL增强之二 Top新用途


发布日期:2018年02月28日
 
SQLServer 2008中SQL增强之二 Top新用途
TOP替代Set RowCount

在SQL Server 之前的传统SQL语句中top语句是不支持局部变量的

此时可以使用Set RowCount但是在SQL Server /TOP通常执行得更快所以应该用TOP关键字来取代Set RowCount

复制代码 代码如下:

/***************创建测试表*********************

****************downmoo  ***************/

IF NOT OBJECT_ID([Demo_Top]) IS NULL

DROP TABLE [Demo_Top]

GO

Create table [Demo_Top]

(PID int identity() primary key not null

PName nvarchar() null

AddTime dateTime null

PGuid Nvarchar()

)

go

truncate table [Demo_Top]

/***************创建条测试数据*********************

****************downmoo  ***************/

declare @d datetime

set @d=getdate()

declare @i int

set @i=

while @i<=

begin

insert into [Demo_Top]

select cast(datepart(msgetdate()) as nvarchar())+Replicate(Adatepart(ssgetdate()))

getdate()

NewID()

set @i=@i+

end

注意TOP关键字可以用于SelectUpdate和Delete语句中

复制代码 代码如下:

Declare @percentage float

set @percentage=

select Top (@percentage) percent PName from [Demo_Top] order by PName

注意是( row(s) affected)

邀月注如果只是需要一些样本也可以使用TableSample以下语句返回表Demo_Top的一定百分比的随机行

复制代码 代码如下:

select PNameAddTime PGuid from [Demo_Top]

TableSample System( percent)

( row(s) affected)

注意这个百分比是表数据页的百分比而不是记录数的百分比因此记录数目是不确定的

TOP分块修改数据

TOP的第二个关键改进是支持数据的分块操作换句话说避免在一个语句中执行非常大的操作而把修改分成多个小块这大大改善了大数据量大访问量的表的并发性可以用于大的报表或数据仓库应用程序此外分块操作可以避免日志的快速增长因为前一操作完成后可能会重用日志空间如果操作中有事务已经完成的修改数据已经可以用于查询而不必等待所有的修改完成

仍以上表为例

复制代码 代码如下:

while (select count() from [Demo_Top])>

begin

delete top () from [Demo_Top]

end

/*

( row(s) affected)

( row(s) affected)

( row(s) affected)

( row(s) affected)

( row(s) affected)

*/

注意是每批删除条数据TOP也可以用于Select和Update语句其中后者更为实用

Select TOP()

Update TOP()

邀月注本文版权由邀月和博客园共同所有转载请注明出处               

上一篇:使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法

下一篇:SQLServer 2008 :error 40出现连接错误的解决方法