SQL Server:当在删除数据库时因为存在触发器而无法删除 ...

打印 上一主题 下一主题

主题 1930|帖子 1930|积分 5790

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
当在删除数据库时因为存在触发器而无法删除,你可以通过禁用触发器来解决这个标题。下面为你先容在 SQL Server 里禁用和启用触发器的方法。
禁用数据库中所有表的触发器

你可以利用系统视图 sys.triggers 来查询数据库里所有的触发器,然后生成禁用这些触发器的 SQL 语句。下面是具体的操作步骤:
1. 生成禁用触发器的 SQL 语句

  1. DECLARE @sql NVARCHAR(MAX) = '';
  2. SELECT @sql = @sql + 'ALTER TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(tb.name) +
  3.               ' DISABLE TRIGGER ' + QUOTENAME(tr.name) + ';'
  4. FROM sys.triggers tr
  5. INNER JOIN sys.tables tb ON tr.parent_id = tb.object_id
  6. INNER JOIN sys.schemas s ON tb.schema_id = s.schema_id
  7. WHERE tr.is_disabled = 0;
  8. -- 执行生成的 SQL 语句
  9. EXEC sp_executesql @sql;
复制代码
代码解释



  • 起首,声明一个 NVARCHAR(MAX) 范例的变量 @sql,用于存储生成的禁用触发器的 SQL 语句。
  • 借助 sys.triggers、sys.tables 和 sys.schemas 系统视图来查询数据库里所有启用的触发器。
  • 针对每个触发器,生成一条 ALTER TABLE...DISABLE TRIGGER... 语句,而且把这些语句追加到 @sql 变量中。
  • 末了,利用 sp_executesql 存储过程来执行生成的 SQL 语句,从而禁用所有触发器。
2. 删除数据库

在禁用所有触发器之后,你就可以或许删除数据库了:
  1. DROP DATABASE YourDatabaseName;
复制代码
请把 YourDatabaseName 更换成你现实要删除的数据库名称。
3. 恢复触发器(假如需要)

要是你后续还需要利用这些触发器,可以重新启用它们。以下是启用数据库中所有触发器的 SQL 代码:
  1. DECLARE @enableSql NVARCHAR(MAX) = '';
  2. SELECT @enableSql = @enableSql + 'ALTER TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(tb.name) +
  3.                     ' ENABLE TRIGGER ' + QUOTENAME(tr.name) + ';'
  4. FROM sys.triggers tr
  5. INNER JOIN sys.tables tb ON tr.parent_id = tb.object_id
  6. INNER JOIN sys.schemas s ON tb.schema_id = s.schema_id
  7. WHERE tr.is_disabled = 1;
  8. -- 执行生成的 SQL 语句
  9. EXEC sp_executesql @enableSql;
复制代码
代码解释



  • 同样先声明一个 NVARCHAR(MAX) 范例的变量 @enableSql,用于存储生成的启用触发器的 SQL 语句。
  • 利用系统视图查询数据库里所有禁用的触发器。
  • 针对每个禁用的触发器,生成一条 ALTER TABLE...ENABLE TRIGGER... 语句,并将这些语句追加到 @enableSql 变量中。
  • 末了利用 sp_executesql 存储过程执行生成的 SQL 语句,以启用所有触发器。
留意事项



  • 在禁用和启用触发器时,要包管你有富足的权限。
  • 在删除数据库之前,务必备份好紧张的数据。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表