sql:
-- 临时表 select * into #sysorgtemp from SysOrg(nolock); select * into #producttemp from ( select ProductId,BdId,p.OrgId productOrgId,u.OrgId userOrgId from Product(nolock) p left join SysUser u on p.BdId = u.LoginId where p.OrgId is null and p.BdId is not null ) temp where temp.userOrgId is not NULL; -- 这里,可以加sql把要更新的数据,备份到一张备份表 BEGIN DECLARE @productid int --接收游标数据的变量,与声明游标查询语句的字段个数相同 DECLARE @userorgid int declare @minigroupid int declare @i int set @i=0; DECLARE cur CURSOR --声明游标 FOR SELECT ProductId,userOrgId FROM #producttemp WHERE ProductId=279 Open cur --打开游标 fetch Next from cur into @productid,@userorgid --查询一次数据到变量 WHILE (@@FETCH_STATUS = 0) --如果不为空就循环读取 BEGIN set @minigroupid=null print @userorgid; WHILE @minigroupid is null and @userorgid>3 AND @userorgid IS NOT null begin select @minigroupid=orgid from #sysorgtemp(nolock) where orgid=@userorgid and IsMinGroup=1; print @userorgid; select @userorgid=ParentId from #sysorgtemp(nolock) where orgid=@userorgid; print CAST( @userorgid AS varchar(10))+' 2'; IF NOT EXISTS(select ParentId from #sysorgtemp(nolock) where orgid=@userorgid) SET @userorgid=NULL; end IF (@minigroupid is not null) UPDATE #producttemp SET productOrgId = @minigroupid where ProductId=@productid and productOrgId is null; FETCH Next FROM cur INTO @productid,@userorgid set @i=@i+1; END CLOSE cur DEALLOCATE cur end -- SELECT OrgId,* FROM dbo.Product WHERE ProductId=20401; UPDATE dbo.Product SET OrgId= t.productOrgId FROM #producttemp t,dbo.Product WHERE t.productorgid IS NOT NULL AND t.ProductId=Product.ProductId AND product.OrgId IS NULL; -- 删除临时表 drop table #sysorgtemp; drop table #producttemp; -- select ParentId from #sysorgtemp(nolock) where orgid=166;