应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

sqlserver触发器

5695人阅读 2020/3/21 17:20 总访问:5194831 评论:0 收藏:0 手机
分类: 数据库


触发器


什么是触发器:触发器是个特殊的存储过程,不是由用户触发,是系统根据事件来触发。对表操作比如

              添加,删除,修改。 也就是在进行DML操作的时候可以触发我们自己写的逻辑


触发器的作用:数据同步(数据同步更新,同步修改), 做一些数据自定义约束.....,可以根据具体业务来实现



触发时间:    操作之前和操作之后,比如添加之前执行,添加之后执行,更新之前,更新之后......

              操作之前: instead of [事件]

              操作之后: after  [事件] / for [事件]



触发器的语法:create trigger 触发器名称

              on 表 [时间] [事件]

              as

              begin

                    ........触发后具体要实现的功能...........

              end



实现一个用户表添加之后执行的触发器: 

               

             create trigger tri_insert

             on userinfo after  insert

             as

             begin


             end


下面是实际的一点例子:

  1. --实现一个用户表添加之后执行的触发器: 
  2. alter trigger tri_insert
  3. on UserInfo after insert
  4. as
  5. begin
  6.   print('更新之后执行')
  7. end
  8. --实现一个用户表修改之前执行的触发器:
  9. create trigger tri_beforeupdate
  10. on userinfo instead of update
  11. as
  12. begin
  13.   print('更新之前执行')
  14. end
  15. --添加之前 (实现一个自定义限制,添加的时候班级必须是.net一班)
  16. go
  17. alter trigger tri_beforeinsert
  18. on userinfo after insert
  19. as
  20. begin
  21.   --print('查看刚刚新添加的数据库内容')
  22.   
  23.   --inserted是触发器中的临时表,用户记录刚刚新添加的内容
  24.   --定义一个变量用于接收用户添加用户的内容
  25.   --declare @tempname nvarchar(64)
  26.   --select @tempname =username from inserted
  27.   --insert UserInfo(username) values(@tempname) 
  28.   
  29.   declare @tempclass nvarchar(64)
  30.   --从临时表中取出来uclass
  31.   select @tempclass = uclass from inserted 
  32.   if(@tempclass = '.NET一班')
  33.      insert UserInfo select username,number,uclass from inserted
  34.   else
  35.   begin
  36.       print('无法添加')
  37.       --报错
  38.       --raiserror('该表只能添加.net一班',16,1)
  39.   end 
  40.     
  41. end
  42. --数据同步,比如有两张表,一张主表,一张附表
  43. alter trigger tri_beforeinsert
  44. on userinfo after insert
  45. as
  46. begin
  47.   --print('查看刚刚新添加的数据库内容')
  48.   
  49.   --inserted是触发器中的临时表,用户记录刚刚新添加的内容
  50.   --定义一个变量用于接收用户添加用户的内容
  51.   --declare @tempname nvarchar(64)
  52.   --select @tempname =username from inserted
  53.   --insert UserInfo(username) values(@tempname) 
  54.   
  55.   -- 添加附表
  56.   insert UserInfo2 select username,number,uclass from inserted
  57.     
  58. end
  59. alter trigger tri_update
  60. on userinfo for update
  61. as
  62. begin
  63.   --select * from inserted
  64.   declare @id int
  65.   declare @username nvarchar(64)
  66.   select @id = id,@username = username from inserted
  67.   --同步修改附表
  68.   update UserInfo2 set username = @username where id = @id
  69. end
  70. --create trigger tri_beforeupdate
  71. --on userinfo instead of update
  72. --as
  73. --begin
  74. --    declare @id int
  75. --    declare @username nvarchar(64) 
  76. --    select @id = id,@username = username from inserted
  77. --    if(@id>5)
  78. --    begin
  79. --       update UserInfo set username = @username where id = @id
  80. --    end
  81. --    else
  82. --    begin
  83. --      raiserror('id1-5无法被修改',16,1)
  84. --    end
  85. --end
  86. alter trigger tri_beforeupdate
  87. on userinfo instead of update
  88. as
  89. begin
  90.    --要先直接使用inserted点出来就需要加一个from inserted 不然是会报错的
  91.    update UserInfo set username = inserted.username from inserted where UserInfo.id =inserted.id
  92. end
  93. select * from UserInfo
  94.  select * from UserInfo2
  95. insert UserInfo values('fff','NS001','.NET一班')
  96. update UserInfo set username = '吕小布ss' where id =1


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

sqlserver order by

order by 字段名order by 第几个字段(整形)order by 排序:order by 字段名:通过字段名指定的字段排序 order by 字段数...

sqlserver保障远程连接的安全性

如果是只读的话建个视图,建个普通用户只对该视图进行读。读写的话就只能自己在加一层代理服务,由代理来进行读写,各客户...

sqlserver约束

添加表后操作约束--删除约束 altertableaj_testdropconstraintCK__aj_test__userAge__5EBF139D --为表aj_test添加默认...

sqlserver存储过程拼接sql语句,分页

在写有些存储过程的时候需要进行sql的拼接,然后在使用exec函数执行sql语句注意字符串的拼接,看下面一段存储过程的sql语句...

sqlserver常用操作

创建临时表createtable#表名() select字段1,字段2....字段ninto#表名from表[where1=1]删除临时表ifOBJECT_ID('tempdb....

Serilog日志记录到sqlserver以及其中存在的问题

1.首先来一大串的安装Install-PackageSerilog //控制台输出 Install-PackageSerilog.Sinks.Console //文件输出 Install...

sqlserver监控sql语句

首先在工具中打开sql server profiler然后登录一下这里可以进行一些常规的筛选,不然监控的sql语句很多的右下方还可以进行...

sqlserver数据库+DBHelper

原始的ASP.NET数据库查询,所需要的帮助类publicclassDBHelper {//创建全局对象 staticSqlConnectionconn=newSqlConnecti...

Core使用codefirst创建sqlserver数据库

1.先添加以下程序包Install-PackageMicrosoft.EntityFrameworkCore Install-PackageMicrosoft.EntityFrameworkCore.SqlSer...

sqlserver ROW_NUMBER 分页

很简单的一个sql语句根据行号分页即可 select * from (select *,ROW_NUMBER() over(order by id) as rownumber from[dbo]....

sqlserver跨库复制表

sql语句:select*intoResourcefromXJ.[dbo].[Resource]注意主键、外键、约束、触发器、索引都不会被复制,只是数据会被复制...

sqlserver基础查询

select top 1 from table1 //————返回表中第一条数据 select top 10 percent * from table1 //...

sqlserver存储过程

什么是存储过程: 预编译的sql语句,可以放很多sql语句,里边可以写条件,循环,可以把一些逻辑放到存储过程里边处理 比如...

sqlserver函数

函数系统自带函数(avg,sum,min,max,count),用户自定义函数 系统分类:表值函数,标量值函数,聚合函数 函数语法:函数必...

sqlserver事务

事务:把所有的操作当中一个整体,要么全部成功,要么全部失败 一旦开启了事务所有的操作都是临时的,你可以选择提交或者...