sqlserver批量更新
① 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條件)