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为该存储过程的参数,如果有多个参数,使用“,”分开就可以了,这也是存储过程调用另一个存储过程的一种方法。