DROP TRIGGER
从当前数据库中删除一个或多个触发器。 语法
DROP TRIGGER { trigger } [ ,...n ]参数
trigger是要删除的触发器名称。触发器名称必须符合标识符规则。有关标识符规则的更多信息,请参见使用标识符。可以选择是否指定触发器所有者名称。若要查看当前创建的触发器列表,请使用 sp_helptrigger。 n是表示可以指定多个触发器的占位符。注释
可以通过除去触发器或除去触发器表删除触发器。除去表时,也将除去所有与表关联的触发器。除去触发器时,将从 sysobjects 和 syscomments 系统表中删除有关触发器的信息。使用 DROP TRIGGER 和 CREATE TRIGGER 重命名触发器。使用 ALTER TRIGGER 更改触发器的定义。有关确定特定触发器相关性的更多信息,请参见本卷中的"sp_depends"。有关查看触发器文本的更多信息,请参见本卷中的"sp_helptext"。有关查看现有触发器列表的更多信息,请参见本卷中的"sp_helptrigger"。权限
默认情况下,将 DROP TRIGGER 权限授予触发器表的所有者,该权限不可转让。然而,db_owner 和 db_dlladmin 固定数据库角色成员或 sysadmin 固定服务器角色成员可以通过在 DROP TRIGGER 语句内显式指定所有者除去任何对象。示例
下例除去 employee_insupd 触发器。USE pubs
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'employee_insupd' AND type = 'TR')
   DROP TRIGGER employee_insupd
GO

解决方案 »

  1.   

    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = N'<trigger_name, sysname, trig_test>' 
       AND    type = 'TR')
        DROP TRIGGER <trigger_name, sysname, trig_test>
    GOCREATE TRIGGER <trigger_name, sysname, trig_test>
    ON <table_name, sysname, pubs.dbo.sales>
    FOR DELETE, INSERT, UPDATE 
    AS 
    BEGIN
    RAISERROR (50009, 16, 10)
    END
    GO
      

  2.   


     Transact-SQL 参考  
    ALTER TRIGGER
    更改原来由 CREATE TRIGGER 语句创建的触发器定义。有关 ALTER TRIGGER 语句所用参数的更多信息,请参见 CREATE TRIGGER。 语法
    ALTER TRIGGER trigger_name 
    ON ( table | view ) 
    [ WITH ENCRYPTION ] 

        { ( FOR | AFTER | INSTEAD OF ) { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 
            [ NOT FOR REPLICATION ]
            AS
            sql_statement [ ...n ]
        } 
        | 
        { ( FOR | AFTER | INSTEAD OF ) { [ INSERT ] [ , ] [ UPDATE ] }
            [ NOT FOR REPLICATION ]
            AS
            { IF UPDATE ( column )
            [ { AND | OR } UPDATE ( column ) ]
            [ ...n ]
            | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
            { comparison_operator } column_bitmask [ ...n ]
            } 
            sql_statement [ ...n ] 
        } 
    }参数
    trigger_name是要更改的现有触发器。 table | view 是触发器在其上执行的表或视图。WITH ENCRYPTION加密 syscomments 表中包含 ALTER TRIGGER 语句文本的条目。使用 WITH ENCRYPTION 可防止将触发器作为 SQL Server 复制的一部分发布。说明  如果原来的触发器定义是用 WITH ENCRYPTION 或 RECOMPILE 创建的,那么只有在 ALTER TRIGGER 中也包含这些选项时,这些选项才有效。
    AFTER指定触发器只有在触发它的 SQL 语句执行成功后才触发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定了 FOR 关键字,那么 AFTER 是默认设置。AFTER 触发器只能定义在表上。INSTEAD OF指定执行触发器而不是触发 SQL 语句,从而替代触发语句的操作。在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。然而,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。INSTEAD OF 触发器不允许定义在用 WITH CHECK OPTION 创建的视图上。如果向指定了 WITH CHECK OPTION 选项的视图添加 INSTEAD OF 触发器,SQL Server 将引发一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。{ [DELETE] [,] [INSERT] [,] [UPDATE] } | { [INSERT] [,] [UPDATE]}是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。 对于 INSTEAD OF 触发器,不允许在具有 ON DELETE 级联操作引用关系的表上使用 DELETE 选项。同样,也不允许在具有 ON UPDATE 级联操作引用关系的表上使用 UPDATE 选项。有关更多信息,请参见 ALTER TABLE。 NOT FOR REPLICATION表示当复制登录(如 sqlrepl)更改触发器所涉及的表时,不应执行该触发器。AS是触发器要执行的操作。sql_statement是触发器的条件和操作。n是表示触发器中可以包含多条 Transact-SQL 语句的占位符。 IF UPDATE (column)测试在指定的列上进行的 INSERT 或 UPDATE 操作,不能用于 DELETE 操作。 可以在触发器主体中的任意位置使用 UPDATE(column)。{AND | OR}指定要测试 INSERT 或 UPDATE 操作的另一个列。column是要测试 INSERT 或 UPDATE 操作的列名。IF (COLUMNS_UPDATED())判断提及的一列或多列是插入还是更新,仅用于 INTSERT 或 UPDATE 触发器中。COLUMNS_UPDATED 返回 varbinary 位模式,该位模式表示表的哪些列进行了插入操作,哪些列进行了更新操作。可以在触发器主体中的任意位置使用 COLUMNS_UPDATED。bitwise_operator是用于比较运算的位运算符。updated_bitmask是整型位掩码,表示实际更新或插入的列。例如,表 t1 包含列 C1、C2、C3、C4 和 C5。假定表 t1 上有 UPDATE 触发器,若要检查列 C2、C3 和 C4 是否都有更新,指定值 14;若要检查是否只有列 C2 有更新,指定值 2。comparison_operator是比较运算符。使用等号 (=) 检查 updated_bitmask 中指定的所有列是否都实际进行了更新。使用大于号 (>) 来检查 updated_bitmask 中指定的列是否有进行过更新的,或者没有全部进行更新。column_bitmask是要检查的列的整型位掩码。注释
    有关 ALTER TRIGGER 的更多信息,请参见 CREATE TRIGGER 中的注释。 说明  由于 Microsoft 不支持在系统表上添加用户定义触发器,所以建议不要在系统表上创建用户定义触发器。
    通过表和视图上的 INSTEAD OF 触发器,ALTER TRIGGER 支持可手工更新的视图。Microsoft&reg; SQL Server&#8482; 以相同的方式对所有类型的触发器(AFTER、INSTEAD-OF)应用 ALTER TRIGGER。可用 sp_settriggerorder 指定表上第一个和最后一个执行的 AFTER 触发器。在表上只能指定一个第一个执行及一个最后一个执行的 AFTER 触发器。如果该表上还有其它 AFTER 触发器,那么这些触发器将以未定义的顺序执行。如果 ALTER TRIGGER 语句更改了第一个或最后一个触发器,则将除去已修改触发器上设置的第一个或最后一个特性,而且必须用 sp_settriggerorder 重置排序值。只有当激发触发器的 SQL 语句(包括所有与被更新或删除对象有关的引用级联操作和约束检查)成功执行后,AFTER 触发器才会执行。AFTER 触发器操作要检查激发触发器的语句的运行结果(也包括所有由激发语句引起的 UPDATE 和 DELETE 引用级联操作)。如果一个子表或引用表上的 DELETE 操作是由于父表的 CASCADE DELETE 操作所引起的,并且子表上定义了 DELETE 的 INSTEAD OF 触发器,那么将忽略该触发器并执行 DELETE 操作。权限
    ALTER TRIGGER 的权限默认地授予 db_owner 和 db_ddladmin 固定数据库角色的成员,以及表所有者。这些权限是不可传递的。示例
    下例首先创建一个触发器,当用户在表 roysched 中添加或更改数据时,该触发器向客户端打印一条用户定义消息。然后,使用 ALTER TRIGGER 语句使该触发器仅对 INSERT 活动有效。该触发器有助于提醒向表中插入行或更新行的用户及时通知书的作者和出版商。 USE pubs
    GO
    CREATE TRIGGER royalty_reminder
    ON roysched
    WITH ENCRYPTION
    FOR INSERT, UPDATE 
    AS RAISERROR (50009, 16, 10)-- Now, alter the trigger.
    USE pubs
    GO
    ALTER TRIGGER royalty_reminder
    ON roysched
    FOR INSERT
    AS RAISERROR (50009, 16, 10)消息 50009 是 sysmessages 中的用户定义消息。有关创建用户定义消息的更多信息,请参见 sp_addmessage。
    请参见DROP TRIGGER设计存储过程 sp_addmessage事务使用标识符&copy;1988-2000 Microsoft Corporation。保留所有权利。
      

  3.   

    sql帮助上都有,不必在此浪费口舌!!
      

  4.   

    xiaozaoqiu(男人40一枝花)说的对,我正在csdn修行呢,大家都是俺师傅:)
      

  5.   

    删除表呢是drop tabel 表名
    删除触发器是 drop trigger 触发器名
    删除存储过程 drop proc 存储过程名
    呵呵
      

  6.   

    USE 库名
    IF EXISTS (SELECT name FROM sysobjects
          WHERE name = 'employee_insupd' AND type = 'TR')
       DROP TRIGGER 触发器名
    GO
      

  7.   

    USE 库名
    IF EXISTS (SELECT name FROM sysobjects
          WHERE name = 'employee_insupd' AND type = 'TR')
       DROP TRIGGER 触发器名
    GO