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

MSSQL
SQL Server数据库技术(122)
SQL Server数据库技术(123)
SQL Server数据库技术(124)
SQL Server数据库技术(125)
SQL Server数据库技术(126)
SQL Server数据库技术(127)
SQL Server数据库技术(128)
SQL Server数据库技术(129)
SQL 语法参考手册
存储过程编写经验和优化措施
Sql Server实用操作小技巧集合
更改数据库中表的所属用户的两个方法
SQL SERVER中直接循环写入数据
无数据库日志文件恢复数据库方法两则
维护Sql Server中表的索引
Sql Server全文搜索中文出错的问题
利用数据库日志恢复数据到时间点的操作
SQL Server2000数据库文件损坏时如何恢复
MySQL和SQL Server,到底选择谁?
SQL特性汇总表

MSSQL 中的 SQL Server中Update的用法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 189 ::
收藏到网摘: 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