演练:调试 SQL CLR 触发器

更新:2007 年 11 月

本主题适用于:

版本

Visual Basic

C#

C++

Web Developer

速成版

主题不适用 主题不适用 主题不适用 主题不适用

标准版

主题不适用 主题不适用 主题不适用 主题不适用

专业团队版

主题适用 主题适用 主题适用 主题适用

表格图例:

主题适用

适用

主题不适用

不适用

主题适用,但命令默认情况下隐藏

默认情况下隐藏的一条或多条命令。

此示例演示如何调试 SQL CLR 触发器。它使用“AdventureWorks”示例数据库中的“Contact”表,该数据库是与 SQL Server 2005 一起安装的数据库之一。该示例在“Contact”表上创建一个新的插入 CLR 触发器,然后单步执行它。

说明:

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置

调试 SQL CLR 触发器:

  1. 在一个新的 SQL Server 项目中,建立一个到“AdventureWorks”数据库的连接。有关更多信息,请参见如何:连接到数据库

  2. 使用下面第一个示例部分中的代码创建一个新触发器,并将其命名为 iContact.cs。有关更多信息,请参见 如何:使用 SQL Server 项目类型进行开发

  3. 添加一个通过激发触发器来测试该触发器的脚本。在“解决方案资源管理器”中,右击“TestScripts”目录,单击“添加测试脚本”,然后插入下面的第二个示例部分中的代码。以 truContact.sql 名称保存文件。右击该文件名,然后单击“设置为默认调试脚本”。

  4. 在 iContact.cs 中设置断点,然后单击“调试”菜单中的“启动”以对该项目进行编译、部署和单元测试。以黄色箭头表示的指令指针出现在断点上时,说明正在调试触发器。

  5. 尝试不同的调试功能。

    1. 单步执行到实例化 SqlTriggerContext 的语句之后。

    2. 打开“局部变量”窗口。注意,可以打开变量 triggContext,它是一个 SqlTriggerContext,并且可以检查它的成员。有关更多信息,请参见如何:使用调试器变量窗口

      说明:

      服务器可能不会反映在调试器窗口中对变量值的更改。有关更多信息,请参见 SQL 调试限制

    3. 从“调试”菜单中选择“单步执行”,单步执行存储过程中的一行。注意,执行已实例化 SqlPipe 类型的变量 sqlP 的值。

    4. 打开“监视”窗口。将 sqlP 变量拖动到“监视”窗口上的任意位置。该变量随即添加到受监视的变量列表中。有关更多信息,请参见如何:使用调试器变量窗口

      说明:

      也可以在“监视”窗口中编辑变量的值。

    5. 在文本编辑器中,右键单击最后一行,再单击“插入断点”。

    6. 在“调试”菜单上,单击“继续”,调试器将运行代码直到新断点。

  6. 再次单击“继续”,完成触发器的调试过程。“输出”窗口中将出现一条消息,提示触发器已成功部署,并显示执行 truContact.sql 文件中的命令的结果。

示例

这是创建在该示例中使用的触发器所需的代码。

using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;


public partial class Triggers
{
      // Enter existing table or view for the target and uncomment the attribute line.
      [Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")]
      public static void Trigger1()
      {
            SqlTriggerContext triggContext = SqlContext.TriggerContext;
            SqlPipe sqlP = SqlContext.Pipe;
            sqlP.Send("primes inserted!");
      }
}

这是将激发触发器的测试脚本。

UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8

请参见

任务

如何:创建和运行 CLR SQL Server 触发器

其他资源

SQL CLR 数据库调试