收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 

交流首页 » .NET »sqlserver2008-top新用途1  XML
发表人 内容
yuzebaby
[头像]

交流经验:
总积分:4517
级别:VIP1
注册时间: 2012-07-19
文章: 400
离线

一、TOP替代Set RowCount

在SQL Server 2005之前的传统SQL语句中,top语句是不支持局部变量的。见http://blog.csdn.net/downmoon/archive/2006/04/12/660557.aspx

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

  1. /***************创建测试表*********************  
  2. ****************downmoo  3w@live.cn ***************/  
  3. IF NOT OBJECT_ID('[Demo_Top]') IS NULL  
  4.     DROP TABLE [Demo_Top]  
  5. GO  
  6. Create table [Demo_Top]  
  7. (PID int identity(1,1) primary key not null  
  8. ,PName nvarchar(100) null  
  9. ,AddTime dateTime null  
  10. ,PGuid Nvarchar(40)  
  11. )  
  12. go  
  13. truncate table [Demo_Top]  
  14. /***************创建1002条测试数据*********************  
  15. ****************downmoo  3w@live.cn ***************/  
  16. declare @d datetime  
  17. set @d=getdate()  
  18. declare @i int  
  19. set @i=1  
  20. while @i<=1002  
  21. begin  
  22.     insert into [Demo_Top]  
  23.     select cast(datepart(ms,getdate()) as nvarchar(3))+Replicate('A',datepart(ss,getdate()))  
  24.     ,getdate()  
  25.     ,NewID()  
  26.     set @i=@i+1  
  27. end  

/***************创建测试表********************* ****************downmoo 3w@live.cn ***************/ IF NOT OBJECT_ID('[Demo_Top]') IS NULL DROP TABLE [Demo_Top] GO Create table [Demo_Top] (PID int identity(1,1) primary key not null ,PName nvarchar(100) null ,AddTime dateTime null ,PGuid Nvarchar(40) ) go truncate table [Demo_Top] /***************创建1002条测试数据********************* ****************downmoo 3w@live.cn ***************/ declare @d datetime set @d=getdate() declare @i int set @i=1 while @i<=1002 begin insert into [Demo_Top] select cast(datepart(ms,getdate()) as nvarchar(3))+Replicate('A',datepart(ss,getdate())) ,getdate() ,NewID() set @i=@i+1 end

 

--注意TOP关键字可以用于Select,Update和Delete语句中

  1. Declare @percentage float  
  2. set @percentage=1  
  3. select Top (@percentage) percent PName from [Demo_Top] order by PName  

Declare @percentage float set @percentage=1 select Top (@percentage) percent PName from [Demo_Top] order by PName
--注意是11行。(11 row(s) affected)

 

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

  1. select PName,AddTime, PGuid from [Demo_Top]  
  2. TableSample System(10 percent)  
  3. --(77 row(s) affected)   

select PName,AddTime, PGuid from [Demo_Top] TableSample System(10 percent) --(77 row(s) affected)

 

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



个性签名:每天进步一点点
 
交流首页 » .NET
前往:   

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网