sql多表更新
--你要先在测试库测试哦
--建表
createtablet_bd_item_info
(
item_noVarchar(20),
item_subnoVarchar(20)
)
--测试数据
insertintot_bd_item_infovalues('12345678','98765432')
insertintot_bd_item_infovalues('123456789012','12345678')
insertintot_bd_item_infovalues('1234567801234','98976543')
--得到需要替换的item_no和item_subno
Select*into#TmpFrom
(
Select*,ROW_NUMBER()over(partitionbyitem_subnoorderbyitem_no)Asid
Fromt_bd_item_infoA
Wherelen(item_no)in(12,13)andLEN(item_subno)=8
Andnotexists(Select*Fromt_bd_item_infoBwhereB.item_no=A.item_subno)
)SwhereID=1
--替换(包含item_no的所有表都替换)
Execsp_MSforeachtable@command1="Update?Setitem_no=B.item_subnoFrom?Ainnerjoin#TmpBonA.item_no=B.item_no",@whereand="Ando.namein(selectdistinctobject_name(object_id)fromsys.columnswherename='item_no')"
--删除临时表
DropTable#Tmp
B. SQL语句实现两个表同时更新
你把 A 表的字段设成主键,把 B 表相应的字段设置成外键,即可建立相关性。
但是更新数据时,必须先删掉 B 表的数据,接着更新 A 表,再 Insert B 表。
若你不想删除,你可以先 Disable 主外键,等更新完,再 Enable 之。
C. sql 多表查询更新
那要看你用的是什么数据了
sqlserver : update A a set a.i = b.k - b.unk from B b where a.key = b.key
oracle : update A a set a.i = (select b.k-b.unk from B b where a.key = b,key) where exists(select 1 from B b a.key = b.key)
试试看 应该是可以的
D. 在sql中,怎么更新表中数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值,update语句的写法:
1、UPDATE table_name
2、SET column1=value1,column2=value2,...
3、WHERE column(1)=value(1),column(2)=value(2)...and column(n)=value(n);
4、UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing',WHERE LastName = 'Wilson'。
用途:更新表中原有数据
单独使用,使用where匹配字段
set后面,更新字段值,既可以一次一项,也可以一次多项
例:
“Person”表中的原始数据:
LastName FirstName Address City
Nilsen Fred Kirkegt 56 Stavanger
Rasmussen Storgt 67
运行下面的SQL将Person表中LastName字段为”Rasmussen”的FirstName更新为”Nina”:
UPDATE Person SET FirstName = 'Nina' WHERE LastName = 'Rasmussen'
E. SQL Server数据库多表关联如何更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表
一、MS SQL Server 多表关联更新
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子句所形成的新的结果集上进行的
F. sql怎么同时更新数据库中多个表
分成几条语句写。但结构关系良好的库应该不存在一个数据变动导致多处要改的情况,因为可以通过表关系,主键自动更新。G. 关于SQL:怎么让多个表同时更新数据
用不到触发器~~一个存储过程就够了,触发器如果没必要还是不要用的好,不过想陷害人倒是不错的
create procere proce_adser
@userName varchar(50),
@gender varchar(2),
@address varchar(100),
@phone varchar(30),
@loginName varchar(20),
@pwd varchar(20),
@customerId int=1
as
insert into UserLogin values(@loginName,@pwd)
select @customerId = customerId from UserLogin
where loginName = @loginName
insert into Customer values(@customerId,@userName,@gender,@address,@phone)
go
最近写的一个项目的插入存储过程
是将值写入第一章表,在用select查找第一章表中的自动增长列的值付给一个函数,再将函数与其余值写入第二章表
H. sql 多表更新查询
语句:
update OneReport
set OneReport.oneration=a.a2
from
(
select pb.proctid a1, o.oneration a2 from proctbaseinf pb
inner join Oneration o
on pb.proctno = o.proctno
) a
where OneReport.proctid=a.a1
因为表proctbaseinf和表Oneration的关联字段没看到,所以假设是proctno,你自己看看
I. SQL数据库怎么进行多表级联更新,求个存储过程
createprocaa
@IDint
as
begin
update表1setflag=1where表1ID=@ID
update表2setflag=1from表1a,表2bwherea.表1ID.=b.表1IDanda.表1ID=@ID
update表3setflag=1from表1a,表3cwherea表1ID.=c.表1IDanda.表1ID=@ID
update表4setflag=1from表1a,表3b,表4cwherea表1ID.=b.表1IDandc.表3ID=b.表3IDanda.表1ID=@ID
update表5setflag=1from表1a,表3b,表5cwherea表1ID.=b.表1IDandc.表3ID=b.表3IDanda.表1ID=@ID
update表6setflag=1from表1a,表3b,表6cwherea表1ID.=b.表1IDandc.表3ID=b.表3IDanda.表1ID=@ID
end
---执行---
--execaa1