演练:调试 SQL CLR 触发器
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
学习版 |
||||
标准版 |
||||
专业及团队版 |
此示例演示如何调试 SQL CLR 触发器。 它使用**“AdventureWorks”示例数据库中的“Contact”表,该数据库是与 SQL Server 2005 一起安装的数据库之一。 该示例在“Contact”**表上创建一个新的插入 SQL CLR 触发器,然后单步执行它。
如果在尝试调试 SQL CLR 对象时,显示消息“被用户取消”,您必须手动配置运行 Visual Studio 的计算机以及运行 SQL Server 的计算机。 有关更多信息,请参见如何:配置计算机以启用 Transact-SQL 和 SQL CLR 调试。
提示
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见 使用设置。
调试 SQL CLR 触发器:
在一个新的 SQL CLR 项目中,建立一个到**“AdventureWorks”**数据库的连接。 有关更多信息,请参见How to: Connect to a Database。
使用下面第一个示例部分中的代码创建一个新触发器,并将其命名为 iContact.cs。 有关更多信息,请参见How to: Develop with the SQL Server Project Type。
添加一个通过激发触发器来测试该触发器的脚本。 在**“解决方案资源管理器”中,右击“TestScripts”目录,单击“添加测试脚本”,然后插入下面的第二个示例部分中的代码。 以 truContact.sql 名称保存文件。 右击该文件名,然后单击“设置为默认调试脚本”**。
在 iContact.cs 中设置断点,然后单击**“调试”菜单中的“启动”**以对该项目进行编译、部署和单元测试。 以黄色箭头表示的指令指针出现在断点上时,说明正在调试触发器。
尝试不同的调试功能。
单步执行到实例化 SqlTriggerContext 的语句之后。
打开**“局部变量”**窗口。 注意,可以打开变量 triggContext,它是一个 SqlTriggerContext,并且可以检查它的成员。 有关更多信息,请参见如何:使用调试器变量窗口。
提示
服务器可能不会反映在调试器窗口中对变量值的更改。 有关更多信息,请参见 SQL 调试限制。
从**“调试”菜单中选择“单步执行”**,单步执行存储过程中的一行。 注意,执行已实例化 SqlPipe 类型的变量 sqlP 的值。
打开**“监视”窗口。 将 sqlP 变量拖动到“监视”**窗口上的任意位置。 该变量随即添加到受监视的变量列表中。 有关更多信息,请参见如何:使用调试器变量窗口。
提示
也可以在“监视”窗口中编辑变量的值。
在文本编辑器中,右击最后一行,再单击**“插入断点”**。
在**“调试”菜单上,单击“继续”**,调试器将运行代码直到新断点。
再次单击**“继续”**,完成触发器的调试过程。 **“输出”**窗口中将出现一条消息,提示触发器已成功部署,并显示执行 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