关联表的批量更新(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

 

 

转载于:https://www.cnblogs.com/downmoon/archive/2007/12/29/1019832.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis 中,你可以使用批量更新来执行批量 SQL 语句。对于 SQL Server 数据库,你可以按照以下步骤来实现批量更新: 1. 首先,在 MyBatis 的配置文件中配置 SQL Server 数据库的连接信息。 ```xml <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=your_database"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </dataSource> </environment> </environments> </configuration> ``` 2. 然后,在映射文件中编写批量更新SQL 语句。假设你要批量更新 `user` 的 `status` 字段,可以使用 `foreach` 元素来遍历传入的参数列。 ```xml <update id="batchUpdateUserStatus" parameterType="java.util.List"> UPDATE user SET status = #{status} WHERE id IN <foreach collection="list" item="item" open="(" close=")" separator=","> #{item} </foreach> </update> ``` 3. 最后,在 Java 代码中调用批量更新的方法。 ```java List<Integer> ids = Arrays.asList(1, 2, 3); // 要更新的 id 列 int status = 1; // 要更新的状态值 try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) { UserMapper userMapper = session.getMapper(UserMapper.class); userMapper.batchUpdateUserStatus(ids, status); session.commit(); } catch (Exception e) { // 异常处理 } ``` 这样,你就可以使用 MyBatis 批量更新 SQL Server 数据库了。请注意,以上代码仅供参考,具体实现可能需要根据你的实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值