SQL Server数据库多表关联如何更新?

SQL Server数据库多表关联如何更新?,第1张

一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新 *** 作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表

一、MSSQLServer 多表关联更新

sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引用要更新的表以外的其它数据。

一般形式:

update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B WHERE逻辑表达式

例如:

UPDATE dbo.Table2

SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB

FROM dbo.Table2

INNER JOIN dbo.Table1

ON (dbo.Table2.ColA = dbo.Table1.ColA)

实际更新的 *** 作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的

--你要先在测试库测试哦

--建表

create table t_bd_item_info

(

    item_no Varchar(20),

    item_subno Varchar(20)

)

--测试数据

insert into t_bd_item_info values('12345678','98765432')

insert into t_bd_item_info values('123456789012','12345678')

insert into t_bd_item_info values('1234567801234','98976543')

--得到需要替换的item_no和item_subno

Select * into #Tmp From 

(

    Select *,ROW_NUMBER() over(partition by item_subno order by item_no) As id 

    From t_bd_item_info A

    Where len(item_no) in(12,13) and LEN(item_subno)=8

    And not exists(Select * From t_bd_item_info B where B.item_no=A.item_subno)

) S where ID=1

--替换(包含item_no的所有表都替换)

Exec sp_MSforeachtable @command1="Update ? Set item_no=B.item_subno From ? A inner join #Tmp B on A.item_no=B.item_no",@whereand=" And o.name in (select distinct object_name(object_id) from sys.columns where name='item_no')"

--删除临时表

Drop Table #Tmp

两表关联更新用如下方法。

有以下两张表:

根据test2表中的id和test1表中的id关联,修改test1表中name字段,语句如下:

update test1 a set a.name=(select b.name from test2 b where a.id=b.id) where a.id in (select id from test2)

更新后,test1表中结果:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9934268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存