`
pavel
  • 浏览: 927920 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql server触发器

阅读更多

最近在使用触发器实现数据同步,中间遇到两个问题
问题一 大字段不能出现在after定义的触发器的inserted,deleted表中,解决方法修改字段的属性值为nvarchar(max),但是instead of没有这个限制
问题二 instead of 与 after的区别

INSTEAD OF 触发器

    用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEAD OF 触发器的动作要早于表的约束处理。
INSTEAD OF 触发器的操作有点类似于完整性约束。在对数据库的操纵时,有些情况下使用约束可以达到更好的效果,而如果采用触发器,则能定义比完整性约束更加复杂的约束。有关触发器与约束的比较,请参见联机丛书。
INSTEAD OF 触发器不仅可在表上定义,还可在带有一个或多个基表的视图上定义,但在作为级联引用完整性约束目标的表上限制应用。


AFTER 触发器

     定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。比如对某个表中的数据进行了更新操作后,要求立即对相关的表进行指定的操作,这时就可以采用 AFTER 触发器。AFTER 触发器只能在表上指定,且动作晚于约束处理。
每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。

 

 

 

CREATE  TRIGGER  t_dalii  ON  [dbo].[员工明细表]   
FOR  INSERT 
AS 
declare  @v_char1  varchar(20),@v_char2  varchar(20),@v_char3  int,@v_char4  varchar(20),@v_char5  datetime 
begin 
       set  @v_char1=(select  所属部门  from  inserted) 
       if  @v_char1<>null 
           begin 
                     if    exists(select  部门号  from    部门状态表  where  部门
=@v_char1
                           set  @v_char2=(select  部门号  from    部门状态表  where  部门
=@v_char1
                   else 
                           set  @v_char2=((select    max(部门号)  from    部门状态表  )+1) 
           end 
           set  @v_char3=(select  编号  from  inserted) 
           set  @v_char4=(select  姓名  from  inserted) 
           set  @v_char5=(select  入厂时间  from  inserted) 
           insert  into  部门人员表  (部门号,部门,编号,姓名,员工属性,进部门时间,是否在职,是否下岗  ) 
           values(@v_char2,@v_char1,@v_char3,@v_char4,''职员'',@v_char5,''是'',''否'') 
end 
---------------------------------------------------------------  
 
create  trigger  tr_name   on  table/view 
{for    ¦  after    ¦  instead  of  }  [update][,][insert][,][delete] 
[with  encryption] 
as  {batch    ¦  if  update  (col_name)  [{and  ¦or}  update  (col_name)]  } 

说明:

1    tr_name  :触发器名称 
2  on  table/view  :触发器所作用的表。一个触发器只能作用于一个表 
3  for  和after  :同义 
4  after  与instead  of  :sql  2000新增项目 
afrer  与  instead  of  的区别 
After                                                    Instead  of 
在触发事件发生以后才被激活                代替了相应的触发事件而被执行 
只可以建立在表上                                  既可以建立在表上也可以建立在视图上 

 
5  insert、update、delete:激活触发器的三种操作,可以同时执行,也可选其一 
6  if  update  (col_name):表明所作的操作对指定列是否有影响,有影响,则激活触发器。此外,因为delete  操作只对行有影响,所以如果使用delete 
操作就不能用这条语句了(虽然使用也不出错,但是不能激活触发器,没意义)。 
7  触发器执行时用到的两个特殊表:deleted  ,inserted 
   deleted  和inserted  可以说是一种特殊的临时表,是在进行激活触发器时由系统自动生成的,其结构与触发器作用的表结构是一样的,只是存放  的数据有差异。 
 
--------------------------------------------------------------- 
 
for  update  修改时激发   
for  insert  插入数据时激发 
for  delete  删除数据时激发 
deleted  有变动的数据的修改前数据集 
inserted 有变动的数据的修改后数据集 

分享到:
评论

相关推荐

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    SQLSERVER触发器插入数据

    ### SQL Server 触发器知识点解析 ...通过以上内容的解析,我们可以了解到SQL Server触发器的基本使用方法及其在实际开发中的应用场景。触发器作为一种强大的工具,能够帮助开发者轻松地维护数据库的完整性和一致性。

    SQLServer触发器语法.pdf

    SQL Server 触发器语法详解 SQL Server 触发器是数据库管理系统中的一种机制,用于在执行某些操作时自动执行特定的操作。触发器可以帮助维护数据的一致性和完整性,提高数据库的安全性和可靠性。本文将详细介绍 SQL...

    SqlServer触发器写法案例

    ### SqlServer触发器详解与案例分析 #### 一、触发器概述 触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者...

    第05节:SQLServer触发器Demo源代码.rar

    这个资源“第05节:SQLServer触发器Demo源代码.rar”很可能是包含了一个C#项目,该项目演示了如何在应用程序中创建、使用和管理SQL Server触发器。通过学习和理解这些示例代码,开发者可以更好地掌握在C#环境中操作...

    sql server触发器.rar

    SQL Server触发器是数据库管理系统中一种非常重要的特性,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为触发事件,而触发器则是对这些事件的响应。理解并...

    sqlserver 触发器 insert阿

    sqlserver 触发器 insert阿 一个关于触发器的小例子

    sqlserver触发器例子

    ### SQL Server 触发器详解 #### 一、触发器概念 触发器是SQL Server中一种特殊的存储过程,其特点在于不能被显式地调用,而是当对特定表进行数据操作(如插入、更新或删除)时自动激活。通过这种方式,触发器能够...

    sql server触发器中自动生成的临时表

    SQL Server 触发器中自动生成的临时表 SQL Server 触发器是一种强大的工具,用于自动执行某些操作,以响应数据库中的变化。其中,系统自动生成的临时表是触发器中一个重要的组成部分。今天,我们将详细介绍 SQL ...

    一个SqlServer触发器的Delphi应用源代码..rar

    本资源“一个SqlServer触发器的Delphi应用源代码..rar”显然是一个结合了这两个技术的实例,旨在帮助开发者了解如何在Delphi中使用SQL Server触发器。 触发器是SQL Server中的一个重要特性,它是一种存储过程,由...

    SQLServer触发器实现不同服务器数据同步.pdf

    SQL Server 触发器实现不同服务器数据同步 在本文中,我们将探讨如何使用 SQL Server 触发器来实现不同服务器之间的数据同步。该方法可以实现在两个或多个服务器之间实时同步数据,提高数据的一致性和可靠性。 ...

    SQL Server触发器

    SQL Server触发器是数据库管理系统中的一种特殊类型的存储过程,它在特定的数据操作事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器的主要作用是扩展SQL语句的功能,用于实现复杂的业务规则,确保数据的...

    SQLServer触发器.pdf

    知识点一:SQL Server触发器的基本概念 SQL Server触发器是一种特殊的存储过程,它会在满足特定条件时自动执行。触发器的执行是由数据表中的数据变化所触发的,例如插入、更新或删除操作。在本文件中,创建了两个...

    Sqlserver触发器例子

    Sqlserver 触发器例子 Sqlserver 触发器是指在 Sqlserver 数据库中,对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。常见的触发器有三种:分别应用于 Insert、Update、...

    新增用户就发送邮件和手机短信的SqlServer触发器

    根据给定的文件信息,我们可以深入探讨如何在SQL Server中创建一个触发器,该触发器在新用户添加到系统时自动发送电子邮件和短信通知。这一技术应用广泛于各种需要即时通知用户注册确认、账户激活或密码重置的场景中...

    使用SQL Server触发器实现数据表的级联更新.pdf

    "使用SQL Server触发器实现数据表的级联更新" SQL Server触发器是数据库中的一种机制,用于实现数据的级联更新。触发器可以被看作是一种特殊的存储过程,可以在数据库事件的触发下执行复杂的SQL语句,从而实现比...

    SQL SERVER 触发器视频讲解

    在SQL Server中,触发器是一种特殊的存储过程,它在数据库中的特定事件发生时自动执行,如数据插入、更新或删除操作。本视频讲解将深入探讨触发器的创建、编辑、修改及其功能,帮助用户更好地理解和应用这些技术。 ...

    利用SQLServer触发器实现表跟踪.pdf

    本篇文章详细介绍了如何通过SQL Server触发器技术创建数据跟踪日志,确保数据安全,并提供了一个应用实例,即利用SQL Server 2000数据库触发器来实现对数据表变化的跟踪。 首先,触发器在数据表发生特定操作时自动...

Global site tag (gtag.js) - Google Analytics