sql update实现一个表中的数据更新另一个表中的数据

前言

由于之前使用过如下代码块这种方式,但是风险比较大。一下把一个表搞的数据乱了,只得恢复数据库重新替换过来,可能是where条件没有写好。

update A SET A.cj = b.cj FROM A ,B WHERE A.Name = B.Name

然后根据自己平时积累写下了如下代码,自己可以验证,风险比较小。

第一步:

首先查询你想要的语句到一个临时表中。可以查看一下是否插入成功

select ROW_NUMBER() OVER(ORDER BY ID)as RowID,* into #tabl1 from V_QM_335 where id>=276     --获取你要的数据插入到一个临时表中
select * from #tabl1

查询成功后的表

第二步

定义变量@i循环i,@count表中数据总数,@ID每次循环的ID。然后从表中查询总数到@count中。查询到有101条数据*

declare @i int=1,@count int,@ID varchar(30)
select @count=count(1) from #tabl1
select @count

查询到有101条数据

第三步:

主要的内容是while块的内容。里边先查询了一下看了看语句是否正确。如下图。验证没毛病后,把select语句注释掉,然后启用exec语句块循环执行语句。OK!!!

select ROW_NUMBER() OVER(ORDER BY ID)as RowID,* into #tabl1 from V_QM_335 where id>=276     --获取你要的数据插入到一个临时表中
select * from #tabl1
declare @i int=1,@count int,@ID varchar(30)
select @count=count(1) from #tabl1
select @count
while(@i<=@count)
begin
    select @ID=V_335_1_10000005 from #tabl1 where RowID=@i 
    declare @strSql varchar(max)='update V_QM_340 set pid='+(select convert(varchar(10),max(ID)) from #tabl1 where V_335_1_10000005=@ID)+' where
V_340_1_10000005='''+@ID+''''
    select(@strSql)
    --exec(@strSql)
    set @i+=1
end

验证更新语句有无问题
备份给自己
SELECT ROW_NUMBER() OVER(ORDER BY PageCode) AS id ,PageCode,ColumnCode INTO #tabl1 FROM dbo.QM_ColumnsInfo WHERE ColumnCode = 10000709

–SELECT * FROM #tabl1
DECLARE @id INT=1
DECLARE @pagecode VARCHAR(100)=’’,@columncode VARCHAR(100)=’’
DECLARE @count int=0,@i int=1;
SELECT @count=COUNT(1) FROM #tabl1
WHILE(@i<@count)
BEGIN
SELECT @pagecode=PageCode,@columncode=ColumnCode FROM #tabl1 WHERE id=@i
DECLARE @sql VARCHAR(MAX)=’’
SET @columncode=‘V_’+@pagecode+‘1’+@columncode
SET @pagecode=‘V_QM_’+@pagecode
SET @sql=‘update ‘+@pagecode+’ set ‘+@columncode+’=REPLACE(’+@columncode+’,’‘qmUpload/file’’,’’/files/qmUpload/file’’)’
–SET @sql=‘select ‘+@columncode+’,REPLACE(’+@columncode+’,’‘qmUpload/file’’,’’/files/qmUpload/file’’) from '+@pagecode
print(@sql)
SET @i+=1
END

DROP TABLE #tabl1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值