time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > SQL SERVER批量更新关联表

SQL SERVER批量更新关联表

时间:2012-11-27 21:22 点击:1740次 字体:[ ]




 在更新一批记录时使用如下语句:

  1. update publish  set contentid= 
  2. (select top 1 articles.contentid from articles 
  3. where articles.articleID=publish.objectID 
  4. --where publish.objectid=@objectID 

前提是:publish表的记录不能大于Article的记录,即要插入的目标表中不能插入null,否则会提示错误。

全来没办法,改为游标:

  1. SET NOCOUNT ON 
  2. DECLARE @contentID int 
  3. declare @objectID int 
  4. declare @countnumber int 
  5. set @countnumber=0 
  6. DECLARE publish_cursor CURSOR FOR  
  7.     select a.contentid,a.articleID from publish p  
  8.     inner join articles a  on a.articleID=p.objectID 
  9.     where objectid>0 and p.contentid<> a.contentid 
  10.     and (p.cellid=160 or cellid=138) 
  11.     OPEN publish_cursor 
  12.  
  13.     FETCH NEXT FROM publish_cursor 
  14.     INTO @contentID,@objectID 
  15.  
  16.         WHILE @@FETCH_STATUS = 0 
  17.         BEGIN 
  18.         print @contentID 
  19.         print @objectID 
  20.          
  21.             --修改记录 
  22.             update publish set ContentID=@contentID where objectid=@objectID 
  23.             --修改结束 
  24.             FETCH NEXT FROM publish_cursor into @contentID,@objectID 
  25.              
  26.         END 
  27.     CLOSE publish_cursor 
  28.     DEALLOCATE publish_cursor 
  29.      
  30. GO 
  31.  
  32. select p.publishid,p.contentid,a.contentid,p.objectID,a.articleID from publish p  
  33. inner join articles a  on a.articleID=p.objectID 
  34. where objectid>0 and p.contentid<> a.contentid 
  35. and (p.cellid=160 or cellid=138) 
  36. go 
  37.  
  38. -- update publish set contentid=0 where (cellid=160 or  cellid=138) 
  39. -- select * from publish p  where ( p.cellid=160 or  cellid=138) 

在没有更好的办法呢?
其实还可以这样:

  1. update publish  set contentid= a.contentid  
  2. from articles a  inner join publish p on p.objectID=a.articleID 
  3. where cellid=138 
  4.  
  5. -- select * from publish where cellid=138 
  6. -- update publish set contentid=0 where cellid=138 

以上适用于SQL SERVER,如果是Oracle,可以试用以下方法:

http://www.fengfly.com/plus/view-210530-1.html



本文地址 : http://www.fengfly.com/plus/view-210532-1.html
标签: SQL Server 批量更新 关联表
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: