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

关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
update publish  set contentid=
关联表的批量更新(SQL SERVER)(
select top 1 articles.contentid from articles
关联表的批量更新(SQL SERVER)
where articles.articleID=publish.objectID
关联表的批量更新(SQL SERVER))
关联表的批量更新(SQL SERVER)
--where publish.objectid=@objectID


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

后来没办法,改为游标:

关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
SET NOCOUNT ON
关联表的批量更新(SQL SERVER)
DECLARE @contentID int
关联表的批量更新(SQL SERVER)
declare @objectID int
关联表的批量更新(SQL SERVER)
declare @countnumber int
关联表的批量更新(SQL SERVER)
set @countnumber=0
关联表的批量更新(SQL SERVER)
DECLARE publish_cursor CURSOR FOR 
关联表的批量更新(SQL SERVER)    
select a.contentid,a.articleID from publish p 
关联表的批量更新(SQL SERVER)    
inner join articles a  on a.articleID=p.objectID
关联表的批量更新(SQL SERVER)    
where objectid>0 and p.contentid<> a.contentid
关联表的批量更新(SQL SERVER)    
and (p.cellid=160 or cellid=138)
关联表的批量更新(SQL SERVER)    
OPEN publish_cursor
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)    
FETCH NEXT FROM publish_cursor
关联表的批量更新(SQL SERVER)    
INTO @contentID,@objectID
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)        
WHILE @@FETCH_STATUS = 0
关联表的批量更新(SQL SERVER)        
BEGIN
关联表的批量更新(SQL SERVER)        
print @contentID
关联表的批量更新(SQL SERVER)        
print @objectID
关联表的批量更新(SQL SERVER)        
关联表的批量更新(SQL SERVER)            
--修改记录
关联表的批量更新(SQL SERVER)
            update publish set ContentID=@contentID where objectid=@objectID
关联表的批量更新(SQL SERVER)            
--修改结束
关联表的批量更新(SQL SERVER)
            FETCH NEXT FROM publish_cursor into @contentID,@objectID
关联表的批量更新(SQL SERVER)            
关联表的批量更新(SQL SERVER)        
END
关联表的批量更新(SQL SERVER)    
CLOSE publish_cursor
关联表的批量更新(SQL SERVER)    
DEALLOCATE publish_cursor
关联表的批量更新(SQL SERVER)    
关联表的批量更新(SQL SERVER)
GO
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
select p.publishid,p.contentid,a.contentid,p.objectID,a.articleID from publish p 
关联表的批量更新(SQL SERVER)
inner join articles a  on a.articleID=p.objectID
关联表的批量更新(SQL SERVER)
where objectid>0 and p.contentid<> a.contentid
关联表的批量更新(SQL SERVER)
and (p.cellid=160 or cellid=138)
关联表的批量更新(SQL SERVER)
go
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
-- update publish set contentid=0 where (cellid=160 or  cellid=138)
关联表的批量更新(SQL SERVER)--
 select * from publish p  where ( p.cellid=160 or  cellid=138)
关联表的批量更新(SQL SERVER)


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

关联表的批量更新(SQL SERVER)update publish  set contentid= a.contentid 
关联表的批量更新(SQL SERVER)
from articles a  inner join publish p on p.objectID=a.articleID
关联表的批量更新(SQL SERVER)
where cellid=138
关联表的批量更新(SQL SERVER)
关联表的批量更新(SQL SERVER)
-- select * from publish where cellid=138
关联表的批量更新(SQL SERVER)--
 update publish set contentid=0 where cellid=138

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

http://www.cnblogs.com/downmoon/archive/2012/11/05/2755245.html

 

 

相关文章: