关联表的批量更新(SQL SERVER)

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


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


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

后来没办法,改为游标:



SET NOCOUNT ON
DECLARE @contentID int
declare @objectID int
declare @countnumber int
set @countnumber=0
DECLARE publish_cursor CURSOR FOR 
    
select a.contentid,a.articleID from publish p 
    
inner join articles a  on a.articleID=p.objectID
    
where objectid>0 and p.contentid<> a.contentid
    
and (p.cellid=160 or cellid=138)
    
OPEN publish_cursor

    
FETCH NEXT FROM publish_cursor
    
INTO @contentID,@objectID

        
WHILE @@FETCH_STATUS = 0
        
BEGIN
        
print @contentID
        
print @objectID
        
            
--修改记录
            update publish set ContentID=@contentID where objectid=@objectID
            
--修改结束
            FETCH NEXT FROM publish_cursor into @contentID,@objectID
            
        
END
    
CLOSE publish_cursor
    
DEALLOCATE publish_cursor
    
GO

select p.publishid,p.contentid,a.contentid,p.objectID,a.articleID from publish p 
inner join articles a  on a.articleID=p.objectID
where objectid>0 and p.contentid<> a.contentid
and (p.cellid=160 or cellid=138)
go

-- update publish set contentid=0 where (cellid=160 or  cellid=138)
--
 select * from publish p  where ( p.cellid=160 or  cellid=138)


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

update publish  set contentid= a.contentid 
from articles a  inner join publish p on p.objectID=a.articleID
where cellid=138

-- select * from publish where cellid=138
--
 update publish set contentid=0 where cellid=138

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

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

 

 

posted @   邀月  阅读(8760)  评论(4编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示