sql循環更新
⑴ sql 循環更新
問題出在這里:
begin
UPDATE orders set qty = @i
set @i = @i + 1
你第八次更新後就把表orders的qty全部更新成8了,你要加條件,如:
begin
UPDATE orders set qty = @i
where id = @i
set @i = @i + 1
那就會按照id來更新,根據id 1到8 更新
⑵ 我有多條sql的更新語句,怎麼用一個循環語句執行一次更新整一張數據表的數據
1、首先,使用Navicat for MySQL連接資料庫並創建一個資料庫。
⑶ 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);
⑷ sql 請教update語句in多個值時,進行多次更新
在資料庫的操作中,更新數據,是很常見的情況。其中sql 請教update語句in多個值時,進行多次更新的方法為:
1、創建一個臨時表,用於演示sqlserver語法中update更新修改使用方法。
注意事項:
SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。
⑸ SQL如何批量更新數據
您好,可先將需要正確的更新的內容導入到另一張表中,通過另一張表的數據與原始的表數據的關聯關系進行批量更新。如此多列都可進行批量更新。
⑹ SQL游標怎麼循環更新
應該不是游標問題,是循環內的判定問題,@i一直沒變過,所以 @i>100不會命中。將set @i提出來:
WHILE @@FETCH_STATUS = 0
BEGIN
set @i = @i + 1
if(@i > 100)
begin
update #aa set @ewaibutie = 5
end
FETCH NEXT from cur_man into @ewaibutie
END
CLOSE cur_man
⑺ sql 循環 更新數據到另一個表
假設A表的ID為自增列,insert into a select (case when aa='h1' then BB else '' end) as h1,
(case when aa='h2' then BB else '' end) as h2,
(case when aa='h3' then BB else '' end) as h3
from b
⑻ 如何寫SQL循環語句,更新多個表.
update t1 set (t1.a,t1.b)=(select t2.a,t2.b from t2 where t1.k1=t2.k1)
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!
vaela
⑼ SQL怎麼向其它表循環更新數據
可以使用一種非游標的方式實現。
1. 先用row_number函數將A、B表的每行都分配一個從0開始的序號。並且,計算出B表的總行數。
select 姓名, row_number() over (order by 姓名) - 1 as seq
from A表;
select 性別, row_number() over (order by 性別) - 1 as seq, count(*) over() as total_rows
from B表;
2. 將兩個查詢連接起來,分組。
select a.姓名, b.性別
from
(select 姓名, row_number() over (order by 姓名) - 1 as seq
from A表) as A,
(select 性別, row_number() over (order by 性別) - 1 as seq, count(*) over() as total_rows
from B表) as B
where a.seq % b.total_rows = b.seq
3. 用查詢結果更新原來的表。為了可讀性,將查詢放到一個CTE里。
with cte_new
as
(
select a.姓名, b.性別
from
(select 姓名, row_number() over (order by 姓名) - 1 as seq
from A表) as A,
(select 性別, row_number() over (order by 性別) - 1 as seq, count(*) over() as total_rows
from B表) as B
where a.seq % b.total_rows = b.seq
)
update A表 set 性別 = c.性別
from A表 as a, cte_new as c
where a.姓名 = c.姓名;
⑽ 如何使用for循環更新sql 語句
CREAT PROCEDURE tester
AS
BEGIN
SET NOCOUNT ON;
DECLARE @userId varchar(50)
DECLARE @count int
SET @count = 0
SELECT @count = count(*) FROM UserService_User WHERE Account like '%111%'
WHILE @count > 0
BEGIN
SELECT @userId = Id FROM UserService_User WHERE Account like '%111%'
exec UserService_RemoveUserByUserId @userId
SET @count = @count -1
END
END
說明:
1、此存儲過程在SQL SERVER 2005上測試通過,值得注意的是,循環體中,語句是使用BEGIN……END包括的,而不是網路上常說的WHILE ……END WHILE結構,其他的循環語句,如LOOP ……UNTIL……END LOOP也不能通過編譯,也許是版本的問題,但在SQL SERVER2005中,循環體使用BEGIN……END就可以,而不能使用網路上常說的WHILE ……END WHILE結構。
2、循環體中 UserService_RemoveUserByUserId 是一個存儲過程的名稱,@userId為該存儲過程的參數,如果有多個參數,使用「,」分開就可以了,這也是存儲過程調用另一個存儲過程的一種方法。