如何使用SQL Server Profiler查看在CLR触发器中运行的TSQL?

时间:2011-09-28 02:33:33

标签: sql-server triggers sqlclr sql-server-profiler

如何使用SQL Server Profiler查看在CLR触发器中运行的TSQL?

我在MS SQL Server数据库中有一个CLR触发器,它检查表上的Inserts,Updates,Deletes,然后有条件地插入另一个表。是否有设置来获取从CLR触发器中生成的那些T-SQL插入以显示SQL Server Profiler跟踪结果?

2 个答案:

答案 0 :(得分:0)

在事件选择选项卡中,单击“显示所有事件”后,会出现CLR部分。 “装配负载”中只有一个事件。当有请求加载CLR程序集时,会发生此事件。来自程序集的任何SQL都应该注册为标准TSQL事件,因此我将转到TSQL部分并选择每个“SQL:”事件。另请查看“错误和警告”部分。我假设程序集的设置有问题,或者在调用SQL之前发生了.NET异常。

如果您的CLR触发器只是另一个表中的条件插入,我将不使用程序集。如果经常选择,更新或删除表,则尤其如此。程序集在服务器应用程序内存空间中运行,而不是在专用的sql server内存空间中运行,所以突然间你的sql服务器使用的应用程序内存比正常情况多。我用这种方式破坏了我公平的sql服务器。

它还在源代码控制,构建中引入了更多复杂性,并且存在一些您应该了解的安全问题。总而言之,我会说使用SQL Server CLR应该是最后的努力。

答案 1 :(得分:0)

这取决于您执行代码的方式。你使用的是SqlCommand吗?如果是,您是将CommandType设置为StoredProcedure还是Text

如果您指定的CommandType为Text或者首先没有指定CommandType(因为Text是默认值),那么这些语句是动态SQL,您需要使用 TSQL 组中的SQL:StmtStarting SQL:StmtCompleted 事件。您的触发器可能就是这种情况。

如果您指定的CommandType为StoredProcedure,请尝试存储过程中的 SP:开始 SP:已完成事件 group。