在更新一批记录时使用如下语句:
update publish set contentid=(select top 1 articles.contentid from articleswhere articles.articleID=publish.objectID)--where publish.objectid=@objectID前提是:publish表的记录不能大于Article的记录,即要插入的目标表中示能插入null,否则会提示错误。
全来没办法,改为游标:
SET NOCOUNT ONDECLARE @contentID intdeclare @objectID intdeclare @countnumber intset @countnumber=0DECLARE 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 GOselect p.publishid,p.contentid,a.contentid,p.objectID,a.articleID from publish p inner join articles a on a.articleID=p.objectIDwhere objectid>0 and p.contentid<> a.contentidand (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.articleIDwhere cellid=138-- select * from publish where cellid=138-- update publish set contentid=0 where cellid=138