加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer触发器的增删和更新操作怎么成功实现

发布时间:2023-04-22 14:45:09 所属栏目:MsSql教程 来源:
导读:在这篇文章中,我们来学习一下“SQLServer触发器的增删和更新操作怎么实现”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。
在这篇文章中,我们来学习一下“SQLServer触发器的增删和更新操作怎么实现”的相关知识,下文有详细的讲解,易于大家学习和理解,有需要的朋友可以借鉴参考,下面就请大家跟着小编的思路一起来学习一下吧。
 
本文实例讲述了SQL Server触发器和事务用法。分享给大家供大家参考,具体如下:
 
新增和删除触发器
 
alter trigger tri_TC on t_c
 
  for INSERT,delete
 
as
 
begin
 
  set XACT_ABORT ON
 
  declare @INSERTCOUNT int;
 
  declare @DELETECOUNT int;
 
  declare @UPDATECOUNT int;
 
  set @INSERTCOUNT = (select COUNT(*) from inserted);
 
  set @DELETECOUNT = (select COUNT(*) from deleted);
 
  set @UPDATECOUNT = ()
 
  if(@INSERTCOUNT > 0)
 
  begin
 
   insert into t_c2 select * from inserted;
 
  end
 
  else if(@DELETECOUNT > 0)
 
  begin
 
   delete t_c2 where exists(select temp.cid from deleted temp where temp.cid=t_c2.cid);
 
  end
 
end
 
更新触发器和事务
 
事务主要用在数据的保护,在多表更新时,事务保存所有事务下的更新语句就不会提交,数据也就不能更新成功
 
alter trigger tri_TC_Update on t_c
 
  for update
 
as
 
begin
 
  declare @delcount int;
 
  set @delcount = (select count(*) from deleted);
 
  if(@delcount > 0)
 
  begin
 
   begin transaction triUpdate --定义事务
 
   declare @cname varchar(100);
 
   select @cname = cname from inserted; --保存更新后的内容
 
   update t_c2 set cname = @cname where cid = (select cid from deleted); --更新
 
   if (@@error <> 0)
 
   begin
 
    rollback transaction triUpdate; --事务回滚
 
   end
 
   else
 
   begin
 
    commit transaction triUpdate;  --事务提交
 
   end
 
  end
 
end
 
存储过程
 
if(exists(select name from sysobjects s where s.name='pro_fun' and s.type='p'))
 
  drop procedure pro_fun
 
go
 
  create procedure pro_fun
 
as
 
  select * from table
 
go
 
exec pro_fun
 
游标
 
declare @qybh varchar(10)
 
declare cur cursor for
 
  select distinct qybh from PJ_EnterpriseInput
 
open cur
 
fetch next from cur into @qybh
 
while @@fetch_status = 0
 
 begin
 
  print(@qybh)
 
  fetch next from cur into @qybh
 
 end
 
close cur
 
deallocate cur
 
视图
 
alter view CreateView
 
as
 
 select qybh from CreateView
 
go
 
定义方法
 
alter function funName(@str1 varchar(10),@str2 varchar(10))
 
returns varchar(10)
 
as
 
begin
 
  declare @returnStr varchar(10)
 
  set @returnStr = 'false'
 
  if(@str1 > @str2)
 
    set @returnStr = 'true'
 
  return @returnStr
 
end
 
select dbo.funName(... , ...)
 
定义表变量
 
declare @qybhTable table (id varchar(32),qybh varchar(30))
 
insert into @qybhTable
 
select id,qybh from PJ_EnterpriseInput
 
select * from @qybhTable
 
case when then 条件统计时的使用
 
select
 
sum(case when z.watchName='注册监理工程师' then 1 else 0 end),
 
sum(case when z.watchName='xinza' then 1 else 0 end),
 
sum(case when z.watchName='监理员' then 1 else 0 end)
 
from zu_corjl z
 
right join zu_corjltemp t on t.corID=z.corID
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章