日期:2014-05-17  浏览次数:20420 次

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
*/