随笔分类 - Triggers
摘要:列出所有触发器以及其所属表: SELECT [so].[name] AS [trigger_name], USER_NAME([so].[uid]) AS [trigger_owner], USER_NAME([so2].[uid]) AS [table_schema], OBJECT_NAME([
阅读全文
摘要:从sys.objects对象表中,可以获取当前数据库所有触发器: SELECT * FROM sys.objects WHERE [type] = 'tr'
阅读全文
摘要:近段时间数据库开发中有遇上一个批量数据插入并触发一个触发器的问题。程序刚开始时,一笔一笔插入是很正常的,后来改了程序,批量数据插入,此时触发器只触发第一笔记录,其余的记录均没有触发到触发器。先来看看问题,在一个表中,如果有记录插入,将会触发发送邮件的功能。为了能批量插入数据,Insus.NET创建一...
阅读全文
摘要:在CLR编写一个插入娄据的触发器。这个触发器是当对表插入数据时,即时把刚才插入的数据显示出来:可复制代码:public static void tri_RetrieveJustInsertedData() { SqlCommand command; SqlTri...
阅读全文
摘要:这段时间学习SQL Server CLR编程,但是SQL CLR编程,里面所使用的数据类型为CLE TYPE,它多少与 Db TYPE有些区别,在网上找到一个列表http://geekswithblogs.net/manjunath.k/archive/2013/09/11/sqldbtype-to...
阅读全文
摘要:Insus.NET分享一个案例网站程序。程序中95%的功能添加与设置在后台管理平台进行,剩余的5%就是前台网页的自定义设计。程序是使用.NET Framework 4.0 + ASP.NET + MS SQL Server 2008 R2 + VB.NET进行开发。功能与特色:文章编辑器使用:CuteEditor。如果你在运行时,出现license的问题时,如下图:可以从官网上下载,然后覆盖BIN目录下的cuteeditor.lic即可。网站中的页首或是页中的广告,你可以上传Flash,也可以上传图片。因为Insus.NET有开发为两者均可呈现。后台管理平台,诸多功能均可以添加,编辑,删除,然
阅读全文
摘要:最近的专案使用这个功能,开发时为程序使用了就定了一个系统帐号如sa,由于某些要求,此帐号不能被更改或是删除,但用户可以添加其它帐号。可以参考下面动画。实现这样的功能,也许方法有很多种。Insus.NET使用了SQL的触发器(Trigger),在删除或是更新做了触发。更新触发器,sa帐号不能被用户更新:tri_Users_UpdateSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate:2012-03-03--De
阅读全文
摘要:需要为程序中添加此功能。系统管理可以管理设置此参数,Default值为0,更新大于0,说明启用功能。其实它和用户管理表中的另外一个选项“密码永不过期”相辅相成之后,才能成形一个完整的功能。管理员更新“密码过期天数”选项值,如果由大于0的数值更新为0(初始值),数据库触发器会检查用户管理表中的“密码永不过期”选项或“密码过期日期”是否有值,如果条件为真,更新动作终止。tri_PasswordParameter_Update SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERTRIGGER[dbo].[tri_PasswordParameter_Updat
阅读全文
摘要:最近开发SQL想控制某些字段,不能手动直接在SQL 编辑更改,因而想到SQL只读字段功能。就比如实现的用户锁定时间,以及密码过期时间,这两个字段均是由密码参数相关设置而系统变更,为了不想让人为在数据手动更改它们,产生与策略相违的做法,因此Insus.NET特为此表写了一个更新(UPDATE)触发器,实现让SQL的字段有只读功能。如:tri_Users_Update CREATETRIGGER[dbo].[tri_Users_Update]ON[dbo].[Users]FORUPDATEASIFUPDATE([LockoutDate])--用户锁定时间BEGINRAISERROR(N'禁
阅读全文
摘要:重构,每天对Insus.NET来说,是必须的工作,不过一直是着重C#程序。昨晚在家中修改SQL一个小问题时,无意中看到一个触发器虽然它能正确运行,但值得重构它。这个触发器功能是当用户预定会议室成功之后,系统会发送一封预定成功的确认函邮件。下面代码是原始触发器tri_MeetingRoomBooking_BookingSuccessNotify SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--=============================================--Author:Insus.NET--Createdate: 2011-08
阅读全文
摘要:开发的软件中是允许用户可以更自己的密码,现在客户有这样一个要求,是当用户更新密码时,要限制用户不能重新使用最近三次的历史密码。实现客户的要求,唯有在数据库,创建一个密码更新Log表,然后再为Member表写一个触发器,每当用户更新密码时,去检索这个Log表,看看这次更新的密码是否存在Log表中,如果存在,提示用户,返之继续更新动作,然后把更新的信息插入Log表中,最后是删除Log记录,只保留此用户最近三次记录。相关代码,可以参考:MemberPasswordChangeLog CREATETABLEMemberPasswordChangeLog(Log_IdINTIDENTITY(1,1)PR
阅读全文
摘要:实现一个AuditLog的功能,是B/S结构专案。每个用户可以登录系统,在程序中操作数据(添加,更新和删除)需要实现记录操作跟踪。是谁添加,更新和删除的,这些信息将会插入至AuditLog表中。一般情况之下,在SQL的触发器中,只能取到(SQL验证sa;Windows验证Domain\xxx)。这些用户名,达不到效果,不能真正反映到是谁操作的。下面是让你清楚,怎样实现在SQL触发器或存储过程中获取在程序登录的用户,是在插入,更新或删除的存储过程,把登录程序当前用户传入进去。在存储过程中,再把相关信息存入局部(#)临时表中,这样子,在触发器即可获取了。下面代码示例,以一个[Member]表作例,
阅读全文
摘要:以前曾经在asp.net实现记录排序功能,参考:http://www.cnblogs.com/insus/articles/1406440.html前端实现,写得很复杂。现在,把它改为触发器来实现,那就简单多了。由于时隔已久,原实例样版代码已经找不到了,只有再写一样功能一样的表。这个表实现与记录插入功能,可以参考相关链接:http://www.cnblogs.com/insus/articles/1921391.htmlhttp://www.cnblogs.com/insus/articles/1921465.htmlhttp://www.cnblogs.com/insus/articles/
阅读全文
摘要:对于例子http://www.cnblogs.com/insus/articles/1921465.html写的触发器有bug,当使用http://www.cnblogs.com/insus/articles/1921618.html例子中的INSERT VALUES的语法头两种插入记录时,[Num]字段只做更第一笔,其他[Num]值均为NULL,解决办法,只好修改触发器,代码如下,代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SETA
阅读全文
摘要:上一个例子http://www.cnblogs.com/insus/articles/1921391.html中,触发器写得有点不好,因为没有考虑到主键值是自动增长的,如果出现有记录被删除了,这个[Num]字段值就不能顺序排列了,会出现空缺。因此需要修改一下这个触发器(TRIGGER),代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->IFEXISTS(SELECT[name]FROMsysobjectsWHERE[name]='t
阅读全文
摘要:下面表[OrderDemo]有一个字段[Num],此字段作为排序字段,在插入时它的值为主键一样,但不能设为IDENTITY自动增长,因为它有可能被更新为其它值。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->IFOBJECT_ID('[dbo].[OrderDemo]')ISNOTNULLDROPTABLE[dbo].[OrderDemo]GOCREATETABLE[dbo].[OrderDemo](OrderDemoId
阅读全文
摘要:为了演示触发器,下面例子分别实现插入,删除触发器。示例之前,先创建两个表,关关联起来。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--创建一个表[Topic]CREATETABLEdbo.Topic(TopicIdINTIDENTITY(1,1)PRIMARYKEYNOTNULL,TitleNVARCHAR(300)NOTNULL,ContentNVARCHAR(2000)NOTNULL,AuthorNVARCHAR(50)NOTNU
阅读全文
摘要:前段时间,曾经写过一个例子,http://www.cnblogs.com/insus/articles/1916558.html是使用OUTPUT来记录更新前后的值,现在可以使用SQL Server的触发器来实现。演示,代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--创建一个UPDATE触发器CREATETRIGGER[dbo].[tri_Member_Udate]ON[dbo].[Member]FORUPDATEASBEGIN--宣
阅读全文
摘要:[Fqa]表与[FqaVisual]表,是一对多的关系,即是说[FqaVisual]表中有一[FqaId]字段是FOREIGN KEY也是[Fqa]表的主键。还有一点重点,就是[Fqa]表的[VisualPassed]字段,与[FqaVisual]表的[Result]字段,这两个字段的数据类型均为BIT。当[VisulaPasswd]字段值为0时,[FqaVisual]表可添加一笔或多笔记录,但最后一笔记录的[Result]字段值为1,一旦[Result]字段值为1时,还要更新[Fqa]表的[VisualPassed]字段为1。当[VisulaPasswd]字段值为1时,无法再对[FqaVis
阅读全文
摘要:某一报表,需要用户自己设定某一项目所显示字段不一样。因此需要设计一个表来管理这些字段。但为了直接显示到目标表上,触发器可以轻松解决此问题。下面一个插入触发器一个删除触发器,请参考SQL Server代码:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERTRIGGER[dbo].[tri_CargoSpace_Insert]ON[dbo].[Carg
阅读全文