当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server中Update的用法

MSSQL
精细讲述SQL Server数据库备份多种方法
让SQL Server也能使用2G以上内存
SQL Server数据库崩溃恢复之法
创建区分大小写的SQL Server 2000实例
SQL Server中易混淆的数据类型
如何优化SQL Server数据库查询
使用Robot连接SQL的例子
如何让你的SQL运行得更快
对Sql Server中的表添加级联更新和级联删除
常用SQL语句书写技巧
SQL Server与Oracle实施成本上的差异
解析SQL Server的数据类型 BLOB
SQL Server数据库和XML标识语言的集成
SQLServer 数据库还原和孤立用户的解决办法
SQL Server 2000/2005 分页SQL
Sql Server锁表
SQLServer2005实现远程数据库备份
SQL精妙语句
SQL Server 2008的逻辑查询处理步骤
如何让你的SQL运行得更快

MSSQL 中的 SQL Server中Update的用法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 104 ::
收藏到网摘: n/a

在表中有两个字段:id_no (varchar) , in_date (datetime) ,把in_date相同的记录的in_date依次累加1秒, 使in_date没有相同的记录。

以下为原始的数据:

id_no in_date

5791 2003-9-1 14:42:02

5792 2003-9-1 14:42:02

5794 2003-9-1 14:42:02

5795 2003-9-1 14:42:03

5796 2003-9-1 14:42:03

5797 2003-9-1 14:42:03

5831 2003-9-1 14:42:04

5832 2003-9-1 14:42:14

5833 2003-9-1 14:42:14

结果为:

id_no in_date

5791 2003-9-1 14:42:02

5792 2003-9-1 14:42:03

5794 2003-9-1 14:42:04

5795 2003-9-1 14:42:05

5796 2003-9-1 14:42:06

5797 2003-9-1 14:42:07

5831 2003-9-1 14:42:08

5832 2003-9-1 14:42:14

5833 2003-9-1 14:42:15

处理的方法:

--建立测试环境

create table a(id_no varchar(8),in_date datetime)

go

insert into a select \'5791\',\'2003-9-1 14:42:02\'

union all select \'5792\',\'2003-9-1 14:42:02\'

union all select \'5794\',\'2003-9-1 14:42:02\'

union all select \'5795\',\'2003-9-1 14:42:03\'

union all select \'5796\',\'2003-9-1 14:42:03\'

union all select \'5797\',\'2003-9-1 14:42:03\'

union all select \'5831\',\'2003-9-1 14:42:04\'

union all select \'5832\',\'2003-9-1 14:42:04\'

union all select \'5833\',\'2003-9-1 14:42:04\'

union all select \'5734\',\'2003-9-1 14:42:02\'

union all select \'6792\',\'2003-9-1 14:42:22\'

union all select \'6794\',\'2003-9-1 14:42:22\'

union all select \'6795\',\'2003-9-1 14:42:23\'

union all select \'6796\',\'2003-9-1 14:42:23\'

union all select \'6797\',\'2003-9-1 14:42:23\'

union all select \'6831\',\'2003-9-1 14:42:34\'

union all select \'6832\',\'2003-9-1 14:42:34\'

union all select \'6833\',\'2003-9-1 14:42:54\'

union all select \'6734\',\'2003-9-1 14:42:22\'

go

--生成临时表,按照in_date排序

select * into # from a order by in_date

--相同的时间,加一秒。加完了不带重复的

declare @date1 datetime,@date2 datetime,@date datetime

update #

set @date=case when @date1=in_date or @date2>=in_date

then dateadd(s,1,@date2) else in_date end,

@date1=in_date,

@date2=@date,

in_date=@date

--更新到基本表中去

update a set a.in_date=b.in_date from

a a join # b on a.id_no=b.id_no

select * from a

drop table #,a