【发布时间】:2012-09-10 07:17:38
【问题描述】:
我在 SQL Server 中为表创建了一个触发器,它对我有用。
我的问题是:如何找到并修改它?
我使用此查询来查找我的触发器:
select * from sys.triggers
这会找到所有触发器,但是如何打开它并更改触发器?
【问题讨论】:
标签: sql-server sql-server-2008
我在 SQL Server 中为表创建了一个触发器,它对我有用。
我的问题是:如何找到并修改它?
我使用此查询来查找我的触发器:
select * from sys.triggers
这会找到所有触发器,但是如何打开它并更改触发器?
【问题讨论】:
标签: sql-server sql-server-2008
您只需使用 SSMS 即可做到这一点。只需转到您的表名并展开触发器节点即可查看与该表关联的触发器列表。右键单击以修改触发器。
【讨论】:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%YourTableName%'
这样您可以列出与给定表关联的所有触发器。
【讨论】:
这可能有用
SELECT
t.name AS TableName,
tr.name AS TriggerName
FROM sys.triggers tr
INNER JOIN sys.tables t ON t.object_id = tr.parent_id
WHERE
t.name in ('TABLE_NAME(S)_GOES_HERE');
这样你只需插入表的名称,查询就会获取你需要的所有触发器
【讨论】:
select m.definition from sys.all_sql_modules m inner join sys.triggers t
on m.object_id = t.object_id
这里只是复制定义并更改触发器。
否则,您只需转到 SSMS 并展开您的数据库,然后在可编程性下展开数据库触发器,然后右键单击特定触发器并单击修改,您也可以更改。
【讨论】:
使用 sp_helptrigger 查找关联表的触发器列表
【讨论】:
在表上查找触发器:
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%TableName%'
你可以找到有表引用的存储过程:
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%yourtablename%'
【讨论】:
通过
Need to list all triggers in SQL Server database with table name and table's schema
此 URL 包含一组查询,您可以通过这些查询获取与特定表关联的触发器列表。
我相信您正在使用 sqlserver 以下是获取修改触发器的步骤
修改触发器
展开一个服务器组,然后展开一个服务器。
Expand Databases,展开包含表的数据库 触发器所属,然后点击表格。
在详细信息窗格中,右键单击触发器所在的表 存在,指向所有任务,然后单击管理触发器。
在名称中,选择触发器的名称。
根据需要在文本字段中更改触发器的文本。按 CTRL+TAB 缩进 SQL Server 企业管理器的文本 触发。
要检查触发器的语法,请单击检查语法。
【讨论】:
通过此查询,您可以在所有表和所有视图中找到所有触发器。
;WITH
TableTrigger
AS
(
Select
Object_Kind = 'Table',
Sys.Tables.Name As TableOrView_Name ,
Sys.Tables.Object_Id As Table_Object_Id ,
Sys.Triggers.Name As Trigger_Name,
Sys.Triggers.Object_Id As Trigger_Object_Id
From Sys.Tables
INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Tables.Object_Id )
Where ( Sys.Tables.Is_MS_Shipped = 0 )
),
ViewTrigger
AS
(
Select
Object_Kind = 'View',
Sys.Views.Name As TableOrView_Name ,
Sys.Views.Object_Id As TableOrView_Object_Id ,
Sys.Triggers.Name As Trigger_Name,
Sys.Triggers.Object_Id As Trigger_Object_Id
From Sys.Views
INNER Join Sys.Triggers On ( Sys.Triggers.Parent_id = Sys.Views.Object_Id )
Where ( Sys.Views.Is_MS_Shipped = 0 )
),
AllObject
AS
(
SELECT * FROM TableTrigger
Union ALL
SELECT * FROM ViewTrigger
)
Select
*
From AllObject
Order By Object_Kind, Table_Object_Id
【讨论】:
您可以通过以下查询查看与您的数据库相关的所有触发器
select * from sys.triggers
对于打开的触发器,您可以使用以下语法
sp_helptext 'dbo.trg_InsertIntoUserTable'
【讨论】:
select o1.name as trigger_name,o2.name as table_name from sys.objects o1
join sys.objects o2 on
o1.parent_object_id=o2.object_id
where o1.type='TR'
and o2.name='my_table'
【讨论】:
select B.name
from sys.objects A
join sys.triggers B
on A.object_id = B.parent_id
where A.name ='Table_name' /*Table Name*/
【讨论】:
下面有很多简单的查询
select (select [name] from sys.tables where [object_id] = tr.parent_id ) as TableName ,* from sys.triggers tr
【讨论】:
从 information_schema.TRIGGERS 中选择 *;
【讨论】:
select t.name as TriggerName,m.definition,is_disabled
from sys.all_sql_modules m
inner join
sys.triggers t
on m.object_id = t.object_id
inner join sys.objects o
on o.object_id = t.parent_id
Where o.name = 'YourTableName'
这将为您提供指定表
上的所有触发器【讨论】:
尝试使用:
select * from sys.objects where type='tr' and name like '%_Insert%'
【讨论】:
你可以打开你的触发器 sp_helptext yourtriggername
【讨论】: