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

问题描述:

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

我有一个MS SQL Server数据库中的CLR触发器,它检查表上的插入,更新,删除,然后有条件地插入到另一个表。是否有一种设置可以使CLR触发器中生成的T-SQL插入显示SQL Server Profiler跟踪结果?

+1

只是好奇......你有逻辑,不能在原始SQL中完成? – gbn

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

如果您的CLR触发器只是一个条件插入到另一个表中,我不会使用程序集。如果从频繁选择,更新或删除表格,则尤其如此。程序集在服务器应用程序内存空间中运行,而不是在专用的sql服务器内存空间中运行,所以突然间您有一台正在使用更多应用程序内存的sql服务器。我用这种方式崩溃了我公平分享的sql服务器。

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

这取决于你如何执行代码。您是否在使用SqlCommand?如果是这样,你是否将CommandType设置为StoredProcedureText

如果您指定的Text一个的CommandType或摆在首位不指定的CommandType(因为Text是默认值),那么语句是动态的SQL,你需要使用SQL:StmtStartingSQL: stmt完成事件中的TSQL组。这可能是你的触发器的情况。

如果您指定的StoredProcedure一个的CommandType,然后尝试SP:启动SP:完成了存储过程事件组。