03
2017
09

sql使用临时表和游标更新酒景orgid(mssql)

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;




版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。