sqlserver两张表数据同时更新?
发布网友
发布时间:2022-05-02 03:48
我来回答
共3个回答
懂视网
时间:2022-05-02 08:09
。似乎很简单
但是今天我遇到这样一个问题:我需要更新一张叫PO_SPECIAL_TASK_LINE表的score字段,这个分数通过另外一张打分详情表(special_assessment_score_detail)计算出来的,
他们之间的关联是字段是taskId和taskLineID。
好了,我马上就写出了如下语句:
update PO_SPECIAL_TASK_LINE
set score=(
SELECT SUM(score) FROM
(SELECT AVG(CONVERT(decimal,score)) score,TASK_LINE_ID FROM dbo.special_assessment_score_detail WHERE TASK_ID=‘‘
GROUP BY TASK_LINE_ID,SPECIAL_INDICATORS_ID) a
GROUP BY TASK_LINE_ID
)
where task_id=‘‘
目的很简单,通过一张打分表算出当前任务的所有行的每个指标的平均分并求和更新到任务行表的对应行中
上面的写法如果是一个任务只有一行是没有问题的,但是如果一个任务有多行数据,我需要批量更新的话,显然这是不行的。
那么这里就用到了update的高级用法(自我称之为高级):
update 表1
set 表1.score=表2.score
from 表1,
表2
where 表1.task_line_id=表2.task_line_id
这里的表2可以是一个查询视图,老铁们是不是觉得很高级,这样不管表2中有几个score,都可以对应更新到表1中了
这里也贴上我在项目中的源码:
UPDATE dbo.PO_SPECIAL_TASK_LINE
SET PO_SPECIAL_TASK_LINE.SCORE=a.score
FROM PO_SPECIAL_TASK_LINE,
(SELECT CAST(ROUND(SUM(score),0) AS INT) score,TASK_LINE_ID
FROM (
SELECT AVG(CONVERT(decimal,score)) score,TASK_LINE_ID FROM dbo.special_assessment_score_detail WHERE TASK_ID=#{taskId} AND PROCESS_STATUS IN (‘4‘,‘5‘,‘0‘) GROUP BY SPECIAL_INDICATORS_ID,TASK_LINE_ID
)s GROUP BY TASK_LINE_ID) a
WHERE PO_SPECIAL_TASK_LINE.TASK_LINE_ID=a.TASK_LINE_ID
AND PO_SPECIAL_TASK_LINE.TASK_ID=#{taskId}
这是mybatis中XML中的代码,参数就是任务ID(taskId)
sqlserver关联更新问题
标签:date 更新 detail round group by set 语句 where 需要
热心网友
时间:2022-05-02 05:17
可以,用触发器可以实现,不过初学应该不会涉及到这么难的吧,写两个sql就可以啦,先更新一张表的列,然后再写一句更新另一张表
热心网友
时间:2022-05-02 06:35
因为不知道你表的字段和类型所以我就随便先定义了下,sql语句如下:
declare
@name
varchar(10),@id
varchar(10),@usr
varchar(10)
declare
a
cursor
for
select
*
from
a;
open
a;
fetch
a
into
@name,@id,@usr;
while
@@fetch_status
=
0
begin
update
b
set
usr=@usr
where
name=@name
and
id=@id;
fetch
a
into
@name,@id,@usr;
end
close
a;
deallocate
a
当中的name,id,usr对应是你的用户身份和帐号字段你自己修改下就可以了
sql server 如何同时更新两张有关系的表
可以使用事务,但是只有当两张表都被更新了才会执行成功,否则事务回滚.例如:begin tran --开始执行事务 update bb set moneys=moneys-@momeys where ID=@fromID -执行的第一个操作,转账出钱,减去转出的金额 update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的...
sql可以两个表一起更新数据吗
如果两个表有关联的话是可以的,比如A表的id和b表的b_id外键关系就可以 update a left join b on a.id = b.b_id set a.name = '',b.name='' (where条件)
sqlserver中的两个表如何实现同时更新?(详见问题说明)
表1和表2建立一个外键关联,设置成集联更新就行了 用触发器也可以
SQLSERVER中同时更新两表中的数据
如果没有一定的条件非要更新两张表,就用两个UPDATE语句好了,我还没有使用过单纯的直接更新,给你一个关联两个表的语句:UPDATE titles SET ytd_sales = titles.ytd_sales + sales.qty FROM titles, sales WHERE titles.title_id = sales.title_id AND sales.ord_date = (SELECT MAX(sales.or...
有两个电脑都安装SQL server,都有一个相同的数据库,如何实现两个数据库...
SQL数据同步:利用数据库复制技术实现数据同步(同时)更新、复制等概念 说明 :复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据...
sqlserver2000中怎么才能同时更新两个表内的数据?
UPDATE [A].[a1]=@a1,[B].[b1]=@b1 FROM [A] INNER JOIN [B] ON [A].[x]=[B].[x]
sqlserver如何同时更新多条数据记录?
1、首先打开sql server managment工具,设计一个数据表,如下图所示。2、然后往数据表中插入一些数据,如下图所示。3、接下来如果想更新某个记录的话,一般通过如下图所示的update语句进行更新。4、但是如果想一下同步多条记录的话,这种更新就不能满足了,如下图所示。5、然后就可以用update和case进行...
如何同步两个SQLServer数据库的内容
选择一个表,执行如下sql: insert into wq_newsgroup_s select '测试成功',5 复制监视器->发布服务器(zehuadb)->sz:sz->快照->启动代理程序 ->zlp:sz(强制)->启动同步处理 去查看同步的 wq_newsgroup_s 是否插入了一条新的记录 测试完毕,通过。7:修改数据库的同步时间,一般选择夜晚执行...
sqlserver同一数据库中A,B两表。使用触发器实现两表双向的数据同步添加...
这个错误很明显 就是SET IDENTITY_INSERT TB_Customer ON 你这条语句在a触发器中已经开启 而b触发器也开启了 此时a触发器还没有关闭IDENTITY_INSERT 另外一个又打开 肯定会报错了 不为什么要插入标识列? 设为自动增长 就不需要这个命令了 你的触发器就可以同时执行 ...
sqlserver不同数据库怎么让数据实时同步?
可以使用数据库比较与同步工具DBSync,具体做法:先建立一个任务:以A为同步之源,以B为同步之目标,同步方式设置为增量同步,以后,只要A发生增删改,就会同步更新至B。