所有人都知道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 tag
----------- ---------- -----------
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
我会在下一篇文章中介绍一个应用,就是很多人关心的如何独占查询(就是一条数据只被一个终端select到)。
如果你感兴趣的话可以自己先思考一下,我给一个提示:
SQLServer2005有一个关键字Output,它可以将更改和插入的数据输出,我们配合update top就可以模拟出来一个相对高效的独占查询的事物。此功能适合用在并行的任务处理或者消费中。
如果你想不出来,请参考后面一篇文章,如果你写出来了,那也和我写的比较一下吧:p
分享到:
相关推荐
例如:"jdbc:sqlserver://servername:port;databaseName=dbname;user=username;password=password"。 3. **数据库连接**:使用`java.sql.DriverManager.getConnection()`方法建立数据库连接。你需要提供之前创建的...
### SQL Server 2005 T-SQL增强 #### 富有表现力的数据类型 (Richer Data Types) 在SQL Server 2005中,T-SQL得到了显著增强,其中一个重要方面是引入了新的数据类型。这些数据类型更加丰富且灵活,能够更好地支持...
### SQL Server 2005新增的小功能详解 #### 一、分页查询数据 在SQL Server 2005之前,实现分页查询通常较为复杂且效率不高。随着SQL Server 2005的发布,引入了一种更为简便的方式来实现分页查询,即通过`ROW_...
`ROW_NUMBER()`是SQL Server 2005引入的新功能,可以为查询结果集中的每一行赋予一个唯一的行号。在分页查询中,通常结合`TOP`或`BETWEEN`来实现。以下是一些示例: - `TOP`方法: ```sql SELECT TOP 20 * ...
而在SQL Server 2005中,TOP表达式支持变量,允许动态地指定返回的行数。例如,通过声明一个变量@n并设置其值,然后在TOP(@n)中使用,就可以灵活地获取前n个订单。 2. **分页查询优化**: SQL Server 2005引入了...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
根据提供的信息,我们可以详细解析如何在SQL Server 2005中实现批量导出照片的功能。此过程涉及到了SQL查询、游标(Cursor)的使用以及系统存储过程`xp_cmdshell`来执行文件操作。 ### SQL Server 2005 批量导出...
SQL Server 2005对T-SQL的功能进行了多方面的改进,如优化了TOP子句,引入了CTE(公共表表达式),添加了PIVOT和UNPIVOT操作符,以及新的DDL触发器和TRY-CATCH错误处理结构。 例如,书中可能包含了使用CLR创建存储...
首先,SQL Server 2005是微软推出的一款中型企业级数据库管理系统,它支持关系型数据库的管理,并提供了丰富的数据管理工具和功能。作为初学者,开始学习时,首先要掌握表和数据类型的概念。 表是数据库中最基本的...
SQL Server 2005 是一个关系型数据库管理系统,提供了丰富的功能用于数据管理和查询。以下是一些基于给定习题的SQL知识点: 1. **查询基础**:`SELECT`语句用于从表中检索数据,`*`表示选择所有列。例如,`SELECT *...
sqlserver2005的select语句top子句可以跟参数,这样就很好的解决了分页的问题,通用的写法就是: select 【排序列】,【显示列1...N】 from TableName where 【排序列】 in select top (@PageNo*@PageSize) ...
开启SQL Server 2005的远程连接功能是配置中的关键步骤。这可以通过配置工具中的SQL Server外围应用配置器实现。具体操作如下: 1. 打开配置工具 -> SQL Server外围应用配置器 -> 服务和连接的外围应用配置器。 2. ...
本教程将详细讲解如何在C#环境中,结合Sql Server 2005数据库实现`DataGridView`的分页功能。 一、基本概念与原理 1. `DataGridView`: 这是Windows Forms中的一个控件,可以显示二维表格数据,支持数据编辑、排序...
- **版本介绍**:SQL Server 2008 是微软发布的一款关系型数据库管理系统(RDBMS),是 SQL Server 2005 的后续版本。它提供了更强大的数据管理功能,支持更广泛的数据类型,并增强了安全性。 - **主要特点**: - ...
SQL Server 2005引入了TOP和ORDER BY子句来实现基本的分页。通过指定TOP N,可以获取前N条记录,配合ORDER BY可以按照特定顺序返回结果。但这种方式在大数据集下可能会导致性能问题,因为它需要扫描所有记录。 3. ...
SSMS是Microsoft提供的一款功能强大的图形化工具,用于管理、配置、控制以及开发SQL Server的各种组件。然而,在使用其数据网格功能进行数据编辑时,SSMS默认只显示并允许编辑查询结果的前200行。这一设置主要是为了...
MySQL使用`LIMIT`和`OFFSET`关键字,而SQL Server则使用`TOP`和`WITH TIES`或`ROW_NUMBER()`函数。 二、Java中的分页查询 1. JDBC基础:Java标准API中的JDBC(Java Database Connectivity)提供了与数据库交互的...
SQL Server 2005的`TOP`功能是一种非常实用的查询操作,允许用户从结果集中选取指定数量的记录。这个功能在数据检索、更新和删除时特别有用,尤其是当处理大量数据时,可以有效地控制返回或操作的数据量。 1. `...
在数据查询方面,文档通过SQL Server的 `TOP n` 语句和Kingbase ES 3.1的 `LIMIT` 关键字,说明了如何在两种数据库中实现相似的查询功能。这表明在迁移数据时,需要转换SQL语法以适应新的数据库环境。 最后,文档还...