删除会员所有信息的触发器

之前,在项目的管理员后台删除会员信息的时候,要求与会员相关的所有表信息删除。这里的删除,指的都是逻辑删除,即将记录的状态置为删除状态,不是从数据库直接删除的物理删除。尽管最后项目经理要求不采用触发器的方案,采用在程序端置状态的方式来实现,还是来mark一下,就算是对Sql server触发器复习一下吧。

该触发器的代码如下所示:

   1: ---在membership会员信息表里面删除指定membershipid的企业会员时(实际上没有进行物理删除,只是将status置为-1)
   2: ---将与企业会员有关的信息表里面的相关信息进行逻辑删除,即status置为-1
   3: If Exists(Select 1 From sys.triggers Where name='membership_update')
   4:     Drop  Trigger membership_update 
   5: Go
   6: create trigger membership_update
   7: on Membership
   8: for update
   9: as
  10: begin
  11: declare @membershipid as int,@status as int
  12: select @membershipid=Membershipid,@status=Status from inserted;
  13: if @status=-1
  14:  begin
  15:        update company set status=@status where membershipid=@membershipid;
  16:        update supply set status=@status where membershipid=@membershipid;
  17:        update buy set status=@status where membershipid=@membershipid;
  18:        update companynews set status=@status where membershipid=@membershipid;
  19:        update honor set status=@status where membershipid=@membershipid;
  20:        update friendlink set status=@status where membershipid=@membershipid;
  21:        update [message] set status=@status where membershipid=@membershipid;
  22:        update employment set status=@status where membershipid=@membershipid;
  23:        update notice set status=@status where membershipid=@membershipid;
  24:  end
  25: end

转载于:https://www.cnblogs.com/jerry01/archive/2012/09/13/2683050.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用如下的 SQL 语句删除所有的触发器: ```sql SHOW TRIGGERS; ``` 这个语句可以列出当前数据库中的所有触发器。然后可以根据需要使用 `DROP TRIGGER` 命令删除触发器,例如: ```sql DROP TRIGGER IF EXISTS trg_check_prerequisite; DROP TRIGGER IF EXISTS trg_update_sc_sno; ``` 这个语句会分别删除名为 `trg_check_prerequisite` 和 `trg_update_sc_sno` 的触发器,如果这些触发器不存在,则不会产生错误。 ### 回答2: 要删除数据库中的所有触发器,可以使用以下的SQL语句: ``` -- 查找所有的触发器 SELECT t.name AS TriggerName, s.name AS SchemaName, o.name AS TableName FROM sys.triggers t INNER JOIN sys.objects o ON t.parent_id = o.object_id INNER JOIN sys.schemas s ON o.schema_id = s.schema_id -- 删除所有的触发器 DECLARE @TriggerName NVARCHAR(128) DECLARE @SchemaName NVARCHAR(128) DECLARE @TableName NVARCHAR(128) DECLARE @Command NVARCHAR(MAX) DECLARE TriggerCursor CURSOR FOR SELECT TriggerName, SchemaName, TableName FROM (-- 查找所有的触发器 SELECT t.name AS TriggerName, s.name AS SchemaName, o.name AS TableName FROM sys.triggers t INNER JOIN sys.objects o ON t.parent_id = o.object_id INNER JOIN sys.schemas s ON o.schema_id = s.schema_id ) AS TempTable OPEN TriggerCursor FETCH NEXT FROM TriggerCursor INTO @TriggerName, @SchemaName, @TableName WHILE @@FETCH_STATUS = 0 BEGIN SET @Command = 'DROP TRIGGER ' + QUOTENAME(@SchemaName) + '.' + QUOTENAME(@TriggerName) EXEC(@Command) FETCH NEXT FROM TriggerCursor INTO @TriggerName, @SchemaName, @TableName END CLOSE TriggerCursor DEALLOCATE TriggerCursor ``` 这段SQL代码首先会查找数据库中的所有触发器,并将它们的名称、所属模式和所属表格名保存在一个临表中。然后通过使用游标(Cursor)来逐个删除这些触发器。游标会循环遍历临表中的每一行,使用`DROP TRIGGER`语句来删除触发器。最后关闭和释放游标。 需要注意的是,删除触发器通常需要适当的权限。在执行代码之前,请确保你具有足够的权限来删除触发器。 ### 回答3: 要删除SQL数据库中的所有触发器,可以使用以下步骤: 1. 首先,连接到SQL数据库中的相应实例。 2. 打开一个新的查询窗口,以执行SQL语句。 3. 使用以下代码查询所有的触发器信息: ```sql SELECT name FROM sys.triggers ``` 4. 确保查询结果显示了所有要删除触发器的名称。 5. 接下来,使用以下代码生成删除触发器的语句: ```sql SELECT 'DROP TRIGGER ' + name + ';' FROM sys.triggers ``` 6. 确保生成的语句有效,然后执行它们删除触发器。 7. 检查触发器是否已成功删除。可以重新运行步骤3的查询来确认触发器已被删除。 请注意,执行删除触发器的操作可能会对数据库的正常运行产生影响,因此在执行之前建议先备份数据库。另外,删除触发器是一项敏感操作,请确保只删除不再需要或有问题的触发器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值