SQL Server 2008中SQL增强之二:Top新用途

一、TOP替代Set RowCount

在SQL Server 2005之前的传统SQL语句中,top语句是不支持局部变量的。见http://www.cnblogs.com/downmoon/archive/2007/12/29/1019686.html

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

/***************创建测试表********************* ****************downmoo [email protected] ***************/
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 [email protected] ***************/
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语句中

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的一定百分比的随机行

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

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

二、TOP分块修改数据

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

仍以上表为例:

while (select count(1) from [Demo_Top])>0 begin delete top (202) from [Demo_Top] end
/* (202 row(s) affected)
(202 row(s) affected)
(202 row(s) affected)
(202 row(s) affected)
(194 row(s) affected) */

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

--Select TOP(100) --Update TOP(100)

时间: 2024-08-23 09:23:21

SQL Server 2008中SQL增强之二:Top新用途的相关文章

SQL Server 2008中SQL增强之一:Values新用途

SQL Server 2008中新增功能:可以使用单个Insert命令插入多行. Create table Demo_Values (PKID int not null identity(1,1) primary key ,DName Nvarchar(20) null ,DCode NVarchar(30) null ,DDate datetime null ) go--this SQL is only for SQL Server 2008 Insert into Demo_Values (

SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MSDN:http://msdn.microsoft.com/zh-cn/library/bb510625.aspx 功能:根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步. 我们看一个例子,假如,有一总产品列表,一个分店产品列表,需要从分店添加产品时更新总产品列表. 总产品表,分店产品表结构完全一致: if OBJECT_ID('

SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) 一条语句实现两表同步(添加、删除、修改)

MERGE 目标表 USING 源表 ON 匹配条件 WHEN MATCHED THEN 语句 WHEN NOT MATCHED THEN 语句; http://www.chinaz.com/program/2010/1014/137713.shtml

SQL Server 2008中增强的汇总技巧

SQL Server 2008中增强的汇总技巧 SQL Server 2008中SQL应用系列--目录索引 SQL Server 2008中对汇总有明显的增强,有点像Oracle的语法了.请看下面五个例子: 假定场景如下:某几位员工在不同时间参加了不同的项目,获取了相应的收入,现在需要按各种分类进行统计. 基本表如下: USE testDb2 GOIF NOT OBJECT_ID('tb_Income') IS NULL DROP TABLE [tb_Income]/****** Object:

SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC规范.KML规范)的GIS专业理论知识.

【转载】SQL Server 2008 中新建用户登录并指定该用户的数据库

提要:我在 SQL Server 中新建用户登录时,出现了三种错误,错误代码分别是 18456.15128.4064 -----------------------------------  正 文 ----------------------------------- 一.实验环境 Windows 7SQL Server 2008数据库实例名为 TestDB,新建的用户名为 testUser 二.操作步骤 1.打开 SQL Server Management Studio,以 Windows身

SQL Server 2008中的9种数据挖掘算法

1.决策树算法 决策树,又称判定树,是一种类似二叉树或多叉树的树结构.决策树是用样本的属性作为结点,用属性的取值作为分支,也就是类似流程图的过程,其中每个内部节点表示在一个属性上的测试,每个分支代表一个测试输出,而每个树叶节点代表类或类分布.它对大量样本的属性进行分析和归纳.根结点是所有样本中信息量最大的属性,中间结点是以该结点为根的子树所包含的样本子集中信息量最大的属性,决策树的叶结点是样本的类别值. 从树的根结点出发,将测试条件用于检验记录,根据测试结果选择适当的分支,沿着该分支或者达到另一

SQL Server 2008性能故障排查(二)——CPU

原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好了版,贴上来就乱得不成样了.建议CSDN改进这部分.也请大家关注内容不要关注排版.同时在翻译的过程中本人也整理了一次思路,所以还似乎非常愿意翻译,虽然有点自娱自乐,但是分享给大家也是件好事 CPU 瓶颈: CPU瓶颈可能因为某个负载所需的硬件资源不足而引起.但是过多的CPU使用通常可以通过查询优化(

SQL Server 2005中的分区表(二):如何添加、查询、修改分区表中的数据

在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中.接上篇文章,我们在创建好的分区表中插入几条数据: 从以上代码中可以看出,我们一共在数据表中插入了13条数据,其中第1至3条数据是插入到第1个物理分区表中的:第4.5条数据是插入到第2个物理分区表中的:第6至8条数据是插入到第3个物理分区表中的:第9至11条数据是插入到第4个物理分区表中的:第12.13条数据是插入到第5个物理分区表中的. 从SQL语句中可以看出,在向分区表中插入数据方法和在普遍表中插入数据