【问题标题】:Unable to find where triggers are stored in sql server 2008无法找到触发器在 sql server 2008 中的存储位置
【发布时间】:2010-07-05 06:47:07
【问题描述】:

我想删除和修改以前创建的触发器,但我无法在数据库中的任何位置找到它们。它们存在的位置以及如何编辑或删除它们

【问题讨论】:

标签: sql-server triggers


【解决方案1】:

您可以在 Table 节点下找到 Triggers:

【讨论】:

    【解决方案2】:

    在SSMS(SQL Server Management Studio)的Tables节点下,每个表都有一个Triggers节点。

    您可以从那里管理您的触发器。

    【讨论】:

      【解决方案3】:

      这里有一个更好的方法:

      select a.[name] as trgname, b.[name] as [tbname] 
      from sys.triggers a join sys.tables b on a.parent_id = b.object_id
      

      请务必针对您认为触发器所在的数据库运行它。

      【讨论】:

        【解决方案4】:

        您还可以通过查询 SQL Server Management Studio 中的管理视图来找到触发器:

        SELECT
            OBJECT_NAME(object_id) 'Table name', *
        FROM 
            sys.triggers
        

        这将为您提供所有触发器的列表以及它们为当前数据库定义的表。然后,您可以继续禁用或删除它们。

        【讨论】:

        • 我喜欢这个版本,因为它显示了对象的所有详细信息,包括创建和修改的时间。
        • 如果您有大量表,这非常有用
        【解决方案5】:

        为了扩展之前的答案,在所有最新版本的 SQL Server 中,您可以右键单击触发器并选择:Script Trigger as… ALTER To… "New Query Editor Window"

        这将打开一个包含触发器详细信息的 SQL 脚本,如果您阅读代码,您会注意到它包含 ALTER 语法:ALTER TRIGGER [dbo].triggername ...

        这意味着您可以编辑 SQL 并按执行来更改触发器 - 这将覆盖之前的定义。

        如果触发器是使用自动化工具构建的,您可能会在触发器定义中发现要删除的重复代码。

        在尝试编辑任何内容之前先尝试执行脚本是值得的,这将告诉您触发器定义是否有效。如果表或列被重命名,事情可能会不同步。

        类似于删除/删除触发器完全选择:Script Trigger as… DROP To… "New Query Editor Window" 然后执行它。

        【讨论】:

        • 当然你应该保存这个脚本并把它放到源代码管理中。所有数据库对象定义都应该像任何其他类型的代码一样在源代码管理中。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 2014-01-19
        • 2016-03-28
        相关资源
        最近更新 更多