设为首页 加入收藏

TOP

Delete语句和Output子句
2014-11-24 08:26:05 来源: 作者: 【 】 浏览:2
Tags:Delete 语句 Output 子句
Delete语句和Output子句
[sql] 
                                
--1.当delete语句要关联其他表时与update语句类似,可参考上面update语句的写法  
  
--2.truncate table语句删除行比delete快很多,不过必须一次删除所有的行(没有where子句)  
--之所以快是因为记录的日志很少,采用表级别锁。  
--如果表中有IDENTITY列,会被重置为列定义的种子值4、TOP--1.在一个事务中删除所有记录,此表的记录有1000w条  
delete from distribution  
  
--2.通过top每次只删除1000条记录  
while (select COUNT(*) from distribution) > 0  
begin  
    delete top (1000)  
    from distribution  
end  
  
/*===============================================================  

比较1和2(不只限于delete,还包括update、insert),2有以下优点:
1.每次操作1000条,就提交一次,那么产生少量的日志,使日志空间更容易被重用;
如果一次删除大量记录,而产生的大量日志可能比整个日志文件还大,
那么会引起日志文件的自动增长,会影响性能
2.分块操作记录,一次锁住更少的记录,占用更少的锁资源,
锁定时间更短,操作完成后这些记录可被其他进程访问,并发性更好
=================================================================*/
OUTPUT子句
[sql] 
create table t(vid int not null,pic varchar(10) not null)  
  
insert into t  
values(1,'abc'),  
      (2,'def'),  
      (3,'hjkl')  
  
--output必须写在where子句之前  
update t  
set pic = 'xyz'       --更新操作由删除+添加组合的  
output deleted.vid,   --删除的记录  
       deleted.pic,  
         
       inserted.vid,  --添加的记录  
       inserted.pic  
where vid < 100  
  
--output写在values之前  
insert into t(vid,pic)  
output inserted.*  
values(5,'mn')  
  
  
declare @temp table(vid int,pic varchar(10))  
  
delete from t  
output deleted.vid,            --引用所有字段deleted.*  
       deleted.pic into @temp  
where vid < 100  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlserver导入sql文件sqlserver中.. 下一篇SQL并发会出现的问题,事务隔离级..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis压力测试实战 - (2025-12-27 09:20:24)
·高并发一上来,微服 (2025-12-27 09:20:21)
·Redis 高可用架构深 (2025-12-27 09:20:18)
·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)