当前位置:  开发笔记 > 数据库 > 正文

什么是检查SQL Server中是否存在触发器的最便携方法?

如何解决《什么是检查SQLServer中是否存在触发器的最便携方法?》经验,为你挑选了3个好方法。

我正在寻找最便携的方法来检查MS SQL Server中是否存在触发器.它至少需要处理SQL Server 2000,2005,最好是2008年.

信息似乎不在INFORMATION_SCHEMA中,但如果它在某处,我宁愿从那里使用它.

我知道这个方法:

if exists (
    select * from dbo.sysobjects 
    where name = 'MyTrigger' 
    and OBJECTPROPERTY(id, 'IsTrigger') = 1
) 
begin

end

但我不确定它是否适用于所有SQL Server版本.



1> marc_s..:

还有首选的"sys.triggers"目录视图:

select * from sys.triggers where name = 'MyTrigger'

或调用sp_Helptrigger存储过程:

exec sp_helptrigger 'MyTableName'

但除此之外,我猜是关于它的:-)

更新(Jakub Januszkiewicz):

如果您需要包含架构信息,您还可以执行以下操作:

SELECT
    (list of columns)
FROM sys.triggers tr
INNER JOIN sys.tables t ON tr.parent_id = t.object_id
WHERE t.schema_id = SCHEMA_ID('dbo')   -- or whatever you need


@ marc-s:顺便说一句,这也意味着如果你在DB的不同模式中有多个具有相同名称的触发器,`select*from sys.triggers`会给你误报.类似于`select*from sys.objects,其中type ='TR'和schema_id =(从sys.schemas中选择schema_id,其中name ='YourSchema')和name ='YourTrigger'将获得正确的触发器.
这在SQL Server 2000中不起作用,因为在SQL Server 2005中引入了sys ...目录视图.

2> wqw..:

这适用于SQL Server 2000及更高版本

IF OBJECTPROPERTY(OBJECT_ID('{your_trigger}'), 'IsTrigger') = 1
BEGIN
    ...
END

请注意,天真的反转不能可靠地工作:

-- This doesn't work for checking for absense
IF OBJECTPROPERTY(OBJECT_ID('{your_trigger}'), 'IsTrigger') <> 1
BEGIN
    ...
END

...因为如果对象根本不存在,则OBJECTPROPERTY返回NULL,并且NULL(当然)不是<> 1(或其他任何东西).

在SQL Server 2005或更高版本上,您可以使用它COALESCE来处理它,但是如果您需要支持SQL Server 2000,则必须构造语句来处理三个可能的返回值:( NULL该对象不存在于所有),0(它存在但不是触发器),或1(它是一个触发器).


[重要警告](https://msdn.microsoft.com/en-us/library/ms190328(v = sql.100).aspx):"*不是架构范围的对象,例如DDL触发器,不能通过使用OBJECT_ID来查询.*"在这些情况下的解决方法是使用`sys.triggers`视图,如@marc_s在他的回答中所描述的那样.

3> 小智..:

假设它是DML触发器:

IF OBJECT_ID('your_trigger', 'TR') IS NOT NULL
BEGIN
    PRINT 'Trigger exists'
END
ELSE
BEGIN
    PRINT 'Trigger does not exist'
END

对于其他类型的对象(表,视图,键,等等......),请参阅:"类型"下的http://msdn.microsoft.com/en-us/library/ms190324.aspx.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有