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