【问题标题】:How can I use SQL Server Profiler to view the TSQL ran in a CLR trigger?如何使用 SQL Server Profiler 查看在 CLR 触发器中运行的 TSQL?
【发布时间】:2011-09-28 02:33:33
【问题描述】:

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

我在 MS SQL Server 数据库中有一个 CLR 触发器,它检查表上的插入、更新、删除,然后有条件地插入另一个表。是否有设置让那些从 CLR 触发器中进行的 T-SQL 插入以显示 SQL Server Profiler 跟踪结果?

【问题讨论】:

  • 只是好奇......你有没有在原始 SQL 中无法完成的逻辑?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您将 CommandType 指定为 StoredProcedure,请尝试 存储过程 中的 SP:Starting 和 SP:Completed 事件组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多