在执行时打印一个触发器的名称是一个好主意吗?

时间:2010-02-12 12:55:22

标签: sql-server sql-server-2008 triggers

我们在顶部放置了一个打印声明,因此当我们在SSMS中运行查询时,消息选项卡会向我显示可能发生的事情比最初遇到的更多。

是否会有很多性能影响?

2 个答案:

答案 0 :(得分:3)

性能损失可能微不足道。

要获得结论性答案,您需要对此进行测试 - 基准测试打印语句需要多长时间以及没有测试时间长度(首次编译时使用新统计信息和后续尝试)。

答案 1 :(得分:2)

我同意@Oded - 打印声明的性能影响可能微不足道。可以说,您可以检查sys.dm_exec_sessions以获取调用@@ SPID并查看它们正在使用的应用程序,并仅在它是Management Studio时有条件地打印。但这比仅仅首先打印更昂贵。只是为了表明它的样子:

IF EXISTS
(
 SELECT 1 
  FROM sys.dm_exec_sessions 
  WHERE session_id = @@SPID
  AND [program_name] LIKE '%Management Studio%'
)
 PRINT 'Trigger : <trigger name>';

为避免复制/粘贴错误,因为您从现有触发器复制了代码而未注意到错误的触发器,我会考虑在SET NOCOUNT ON之后更改新的触发器模板以获得此代码: / p>

PRINT 'Trigger : ' + OBJECT_NAME(@@PROCID);

这显然比仅仅硬编码名称要贵一些,但如果您容易出现这种类型的复制/粘贴错误(我知道我会不时这样做),可能会在以后阻止一些故障排除问题。 / p>

在任何情况下,即使您不想这样做,也可以添加以下行:

PRINT 'Trigger : <Trigger_Name, sysname, Trigger_Name>';

您可以转到查看&gt;更改新触发器的模板。模板资源管理器,展开“触发器”,右键单击“创建T-SQL触发器(新菜单)”,然后选择“编辑”。添加上面的行并转到文件&gt;保存。现在,当您想要创建一个新的触发器时,您可以通过我刚才提到的相同过程打开此文件,或者您可以在对象资源管理器中展开一个表,右键单击“触发器”并选择“新触发器...”当您打开你可以点击CTRL + SHIFT + M的代码,它会给你一个简单的小UI,让你可以替换所有的令牌参数,方便输入表名,动作类型等。当然,当你已完成并创建了触发器,您应该将该脚本保存在源代码管理中,但这是一个不同的讨论。