一条sql语句同时更新两个表中的同一个字段,他们是主外键的关系

时间:2021-03-28 15:09:21
一条sql语句同时更新两个表中的同一个字段,他们是主外键的关系,例如表A (a varchar(20),b varchar(20),c varchar(20)),   B(a varchar(20),d varchar(20)),A,B表中的a字段是主外键的关系,我想把A表a字段的值更新为c字段的值,请问怎么做,急用?

8 个解决方案

#1


你想改A表的主键?

#2


不行吗?

#3


同时更新与是否外键有什么关系,做触发器看看。

#4


-- =========================================
-- -----------t_mac 小编-------------
   ---希望有天成为大虾---- 
-- =========================================

IF OBJECT_ID('pk') IS NOT NULL
  DROP TABLE pk
GO
CREATE TABLE pk(a int primary key not null,b int ,c int)
go
insert into pk
select 1,2,3  union all
select 2,2,6  union all
select 3,3,5  union all
select 4,8,4 union all
select 5,2,9 
go
IF OBJECT_ID('b') IS NOT NULL
  DROP TABLE b
GO
CREATE TABLE b(a int ,d int,constraint FK_b_a foreign key(a) references pk(a) on update cascade )
go
insert into b
select 1,3 union all
select 3,3 union all
select 5,6 
go
update pk
set a=c

select * from pk  
select * from b
/*------------
a           b           c
----------- ----------- -----------
3           2           3
4           8           4
5           3           5
6           2           6
9           2           9

(5 行受影响)

a           d
----------- -----------
3           3
5           3
9           6

(3 行受影响)

-------*/

用级联就可以搞定了

#5


--楼主注意 你既然要更新pk主键a的值为C值 就要先保证表里的 C值无重复@

#7


谢谢大侠们了!

#8


学习了。

#1


你想改A表的主键?

#2


不行吗?

#3


同时更新与是否外键有什么关系,做触发器看看。

#4


-- =========================================
-- -----------t_mac 小编-------------
   ---希望有天成为大虾---- 
-- =========================================

IF OBJECT_ID('pk') IS NOT NULL
  DROP TABLE pk
GO
CREATE TABLE pk(a int primary key not null,b int ,c int)
go
insert into pk
select 1,2,3  union all
select 2,2,6  union all
select 3,3,5  union all
select 4,8,4 union all
select 5,2,9 
go
IF OBJECT_ID('b') IS NOT NULL
  DROP TABLE b
GO
CREATE TABLE b(a int ,d int,constraint FK_b_a foreign key(a) references pk(a) on update cascade )
go
insert into b
select 1,3 union all
select 3,3 union all
select 5,6 
go
update pk
set a=c

select * from pk  
select * from b
/*------------
a           b           c
----------- ----------- -----------
3           2           3
4           8           4
5           3           5
6           2           6
9           2           9

(5 行受影响)

a           d
----------- -----------
3           3
5           3
9           6

(3 行受影响)

-------*/

用级联就可以搞定了

#5


--楼主注意 你既然要更新pk主键a的值为C值 就要先保证表里的 C值无重复@

#6


#7


谢谢大侠们了!

#8


学习了。