當前位置:首頁 » 編程語言 » sqlserver批量更新

sqlserver批量更新

發布時間: 2022-12-27 09:03:42

sql 批量更新語句

1.使用存儲過程
2.在程序代碼里逐條循環執行
這里給出一種更高效、簡潔的做法,批量更新SQL ,一句SQL就可以替代麻煩的循環過程,有MS SQLServer、Oracle、DB2下的寫法
--關鍵點:t4和t1是同一個table,primary key肯定也是同一個,
--並以它進行關聯,這樣在 select語句里即可引用到要update的表的fields

UPDATETable1ASt1
SET(Field1,Field2)=(SELECTField21,Field22
FROMTable2t2
INNERJOINTable3t3
ONt3.Field31=t2.Field23
INNERJOINTable4t4
ONt3.Field32=t4.Filed41
WHEREt2.Field24>=''
ANDt1.fId=t4.fId);
----------------------------MSSQLServer-----------------------------------

UPDATEt1
SETField1=Field21,Field2=Field22
FROMTable2t2
INNERJOINTable3t3
ONt3.Field31=t2.Field23
INNERJOINTable4t4
ONt3.Field32=t4.Filed41
WHERE((t2.Field24>='')
ANDt1.fId=t4.fId);

② sqlserver資料庫,批量更新用in不生效。

這跟你的存儲過程有關,明顯是傳進去的id值拼接成了一個字元串,存儲過程沒處理,導致存儲過程真正執行的sql是這樣的↓
select * from tb where id in('1002,5008')
看到沒,資料庫就認為'1002,5008'這個是一個單獨的id

把存儲過程的sql列印出來看下你就清楚了。

③ sqlserver 批量更新某些行數據等於另一行數據,求教!

這個題目可以採用相關子查詢實現:
update aab set pic=(select pic from aab aab1 where aab1.dmlx=aab.dmlx and pic!='0'), place=(select place from aab aab2 where aab2.dmlx=aab.dmlx and place is not null)

④ sqlserver 批量更新某些行數據等於另一行數據,求教

我個人的建議是..把有數據的列..重新導到一張新表 可以用 create table table_name select column_name1,column_name2 from aab;

然後以這張新表為條件.進行更改..
因為你在update的時候..不能用更改的表做為條件...這是語法不允許的...

⑤ sqlserver 批量更新某些行數據等於另一行數據,求教

update table set
pic = (select max(pic) from table where dmix = table.dmix and place != 0 and place is not null)
,place = (select max(place ) from table where dmix = table.dmix and place != 0 and place is not null)
where pic= 0 and place is null

⑥ sql server如何批量更新數據。

update表名setvalue=casewhenid=1then一個值
whenid=2then一個值
whenid=3then一個值elsevalue
end

上邊就是舉個例子,意思是,當id=1時,把value設定個值,當id=2時,value設定另一個值,依次類推,不需要更改的保留原來的value值,最後以end結尾

⑦ SQLserver 大批量更新插入的時候游標怎麼優化

盡量避免使用游標,因為游標的效率較差,如果游標操作的數據超過1萬行,那麼就應該考慮改寫。
使用基於游標的方法之前,應先尋找基於集的解決方案來解決問題,基於集的方法通常更有效。
最好的改進游標性能的技術就是:能避免時就避免使用游標


若有時無法避免使用游標,則可以用如下技巧來優化游標的性能。
(1). 除非必要否則不要使用static/insensitive游標。打開static游標會造成所有的行都被拷貝到臨時表。這正是為什麼它對變化不敏感的原因——它實際上是指向臨時資料庫表中的一個備份。很自然,結果集越大,聲明其上的static游標就會引起越多的臨時資料庫的資源爭奪問題。
(2). 除非必要否則不要使用keyset游標。和static游標一樣,打開keyset游標會創建臨時表。雖然這個表只包括基本表的一個關鍵字列(除非不存在唯一關鍵字),但是當處理大結果集時還是會相當大的。
(3). 當處理單向的只讀結果集時,使用fast_forward代替forward_only。使用fast_forward定義一個forward_only,則read_only游標具有一定的內部性能優化。
(4). 使用read_only關鍵字定義只讀游標。這樣可以防止意外的修改,並且讓伺服器了解游標移動時不會修改行。
(5). 小心事務處理中通過游標進行的大量行修改。根據事務隔離級別,這些行在事務完成或回滾前會保持鎖定,這可能造成伺服器上的資源爭奪。
(6). 小心動態游標的修改,尤其是建在非唯一聚集索引鍵的表上的游標,因為他們會造成「Halloween」問題——對同一行或同一行的重復的錯誤的修改。因為SQL Server在內部會把某行的關鍵字修改成一個已經存在的值,並強迫伺服器追加下標,使它以後可以再結果集中移動。當從結果集的剩餘項中存取時,又會遇到那一行,然後程序會重復,結果造成死循環。
(7). 對於大結果集要考慮使用非同步游標,盡可能地把控制權交給調用者。當返回相當大的結果集到可移動的表格時,非同步游標特別有用,因為它們允許應用程序幾乎馬上就可以顯示行

⑧ sql 批量更新數據

給你寫個sqlserver的,其他資料庫的話另說

1

update table2 set pwd=table1.ip from table1 inner join table2 on table1.username=table2.username

⑨ sqlserver 關聯表批量更新多行

update a set a.name1 = b.name1, a.name2=b.name2
from 表A a, 表B b where a.id=b.id

⑩ sql可以兩個表一起更新數據嗎

如果兩個表有關聯的話是可以的,比如A表的id和b表的b_id外鍵關系就可以
update a left join b on a.id = b.b_id set a.name = '',b.name='' (where條件)

熱點內容
cl加密狗 發布:2024-11-01 10:28:52 瀏覽:610
php建網站 發布:2024-11-01 10:07:37 瀏覽:566
利用舊電腦搭建自己的私有雲伺服器 發布:2024-11-01 10:07:24 瀏覽:608
dl388p伺服器怎麼換硬碟 發布:2024-11-01 10:02:12 瀏覽:254
雲伺服器可以打游戲嘛 發布:2024-11-01 09:49:49 瀏覽:582
編程聚會 發布:2024-11-01 09:38:51 瀏覽:898
7z壓縮密碼 發布:2024-11-01 09:38:50 瀏覽:660
sql字元串去掉空格 發布:2024-11-01 09:27:27 瀏覽:17
c語言學生通訊錄 發布:2024-11-01 09:26:22 瀏覽:286
門線告警演算法 發布:2024-11-01 09:24:58 瀏覽:522