關聯表的批次更新(SQL SERVER)

來源:互聯網
上載者:User

 在更新一批記錄時使用如下語句:


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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.