循环更新

Neusoft06 2015-03-20 05:46:17
有两张表
Table1
Tcode Ccode PDcode Rate
T1 C1 pd001 0.012
T2 C1 NULL 0.022
T3 C2 NULL 0.036

Table2
PDcode Rate
pd001 0.01
pd002 0.02
pd003 0.03
pd004 0.04
......................

需求来了

将Table1的PDcode为NULL的记录更新为Table2的PDcode ,条件是取Table1的Rate在Table2里的Rate的接近值
更新结果如下
Table1
Tcode Ccode PDcode Rate
1 1 pd001 0.012
2 1 pd002 0.022
3 2 pd004 0.036

UPDATE Table1 SET PDcode =(
SELECT * FROM Table2
WHERE ABS(Table2.Rate-0.22)=(SELECT MIN(ABS(Rate-0.22)) FROM Table2 )
WHERE Table1.Tcode ='T2' AND Ccode ='C1'

怎样动态传入0.22,T2,C1的值呢
现在的做法是先取Table1的信息,然拼接SQL逐条更新
又没有更好的写法呢?

...全文
120 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-03-20
  • 打赏
  • 举报
回复
这样写可能好一点
update Table1,Table2 set Table1.PDcode=Table2.PDcode
  where abs(Table1.Rate - Table2.Rate) < 0.005 and Table1.PDcode is null
Tcode Ccode PDcode Rate 
T1    C1    pd001  0.012 
T2    C1    pd002  0.022 
T3    C2    pd004  0.036 
  • 打赏
  • 举报
回复
现在不知道你的数据格式是什么样地,如果你的真实数据和你的例子一样,都是Table1的Rate比Table2的Rate多后面的小数位,而且两者的比例还是1:1 那你完全可以通过一句update实现这个需求,关键就是
table1.Rate>=table2.Rate and table1.Rate<table2.Rate+0.01
bdmh 2015-03-20
  • 打赏
  • 举报
回复
如果你是通过sql去更新,可以拼接sql,0.22作为一个变量通过字符串的 + 拼接到一起,或者可以通过参数化查询(方法网上去搜)
为轮子而生 2015-03-20
  • 打赏
  • 举报
回复
你要知道,SQL语句中也可以声明变量,也可以使用循环体的,比如:

DECLARE @i int
SET @i=Tcode起始值
WHILE @i<=Tcode终止值
BEGIN
  UPDATE Table1 SET PDcode  =(……) WHERE Table1.Tcode=i
  SET @i=@i+1
END
可能这段语句不能完全满足你的需要,但你应该能学会“循环”的用法

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧