紧急!如何用一条SQL语句同时更新两张表中关联记录的字段

njtlxm 2004-10-14 10:07:55
两张表,有字段关联.现在需要用一条update语句同时分别更新表A中的字段1和表B中的字段2,赋予不同的值,这个语句怎么写?
...全文
1963 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swich 2004-10-14
  • 打赏
  • 举报
回复
接分
LJWS 2004-10-14
  • 打赏
  • 举报
回复
用触发器也可以呀
haitao5676 2004-10-14
  • 打赏
  • 举报
回复
直接用触发器不就行了吗?
sunshareforever 2004-10-14
  • 打赏
  • 举报
回复
update table set col=condision


update后接的就是要更新的表但只能更新一个表?

但要想实现你要的功能,建议写在触发器里。
njtlxm 2004-10-14
  • 打赏
  • 举报
回复
多谢各位,已经搞定.分开写吧,不想专牛角尖了
zjcxc 元老 2004-10-14
  • 打赏
  • 举报
回复
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段 字段1
----------- ----------
1 XX
2 XX

(所影响的行数为 2 行)

关联字段 字段2
----------- ----------
1 YY
2 YY

(所影响的行数为 2 行)
--*/

zjcxc 元老 2004-10-14
  • 打赏
  • 举报
回复
--如果可以的话,楼主可以创建一个视图,然后利用视图来实现同时更新字段1,字段2


--下面是示例

--示例数据
create table ta(关联字段 int,字段1 varchar(10))
insert ta select 1,'aa'
union all select 2,'bb'

create table tb(关联字段 int,字段2 varchar(10))
insert tb select 1,'AA'
union all select 2,'BB'
go

--创建视图
create view v_ta_tb
as
select a.*,b.字段2 from ta a,tb b where a.关联字段=b.关联字段
go

--创建视图的更新触发器
create trigger tr_update on v_ta_tb
instead of update
as
--更新表a
update a set 字段1=i.字段1
from ta a,inserted i
where a.关联字段=i.关联字段

--更新表b
update b set 字段2=i.字段2
from tb b,inserted i
where b.关联字段=i.关联字段
go

--更新
update v_ta_tb set 字段1='XX',字段2='YY'
go

--显示更新结果
select * from ta
select * from tb
go

--删除测试
drop table ta,tb
drop view v_ta_tb

/*--测试结果

关联字段 字段1
----------- ----------
1 XX
2 XX

(所影响的行数为 2 行)

关联字段 字段2
----------- ----------
1 YY
2 YY

(所影响的行数为 2 行)
--*/

victorycyz 2004-10-14
  • 打赏
  • 举报
回复

这样算不算一条语句?

str="update a set col1=xxx from a join b on a.col0=b.col0 update b set col2=yyy from a join b on a.col0=b.col0"

conn.execute str
zjcxc 元老 2004-10-14
  • 打赏
  • 举报
回复
--SQL不支持这种更新

--可以用两句来更新
update a set 字段1='xx'
from a,b where a.关联字段=b.关联字段

update b set 字段2='xx'
from a,b where a.关联字段=b.关联字段
haoK 2004-10-14
  • 打赏
  • 举报
回复
不行吧,只能分两次更新,

如果更新之后会改变关联字段的值
可以先把关联字段缓存到临时表,再分别更新两个表

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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