首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

update的值介于另外一个表

2013-06-19 
update的值取决于另外一个表表A字段:UpdateTime表B字段: Holiday表B中有多条Holidaydeclare @AddDays int

update的值取决于另外一个表
表A字段:UpdateTime
表B字段: Holiday
表B中有多条Holiday
declare @AddDays int
更新的值A: select Count(*) from 表B where Holiday>UpdateTime and Holiday<CONVERT(varchar, DATEADD(DD,@AddDays,UpdateTime),23)
需要更新的值B=A+@AddDays
update 表A set UpdateTime=CONVERT(varchar, DATEADD(DD,需要更新的值B,UpdateTime),23)

大概的意思就是从Holiday中查出>UpdateTime and <UpdateTime+@AddDay的记录条数,然后再加上@AddDay,更新表A的UpdateTime
[解决办法]

引用:
Quote: 引用:

UpdateTime每行都不一样,所以在表B中所查询出来的Count也肯定不一样,AddDays都一样,所以有没有动态根据UpdateTime在表B中所得到的Count来更新原有的UpdateTime
但是你总得有个关联的字段,哪怕不是主键,不然SQLServer怎么知道A表中的某一行应该用B表中的哪一个值呢?

我觉得用不用连接用关联就可以拉。
下面是我做的测试。

if OBJECT_ID('a') is not null
drop table a
if OBJECT_ID('b') is not null
drop table b
go
create table a(updatetime date)
create table b(holiday date)
insert into a values('2013-05-03'),
('2013-05-26'),
('2013-07-08')
insert into b values('2013-05-05'),
('2013-05-28'),
('2013-05-26'),
('2013-05-29'),
('2013-06-15'),
('2013-08-10')
select * from a
declare @adddays int=5
update a set updatetime=
DATEADD(dd,(select COUNT(1) from b where holiday>a.updatetime and holiday<dateadd(dd,@adddays,a.updatetime)),
updatetime) from a
select * from a
/*
updatetime
----------
2013-05-03
2013-05-26
2013-07-08

updatetime
----------
2013-05-04
2013-05-28
2013-07-08
*/

热点排行