演练:调试 SQL CLR 用户定义的标量函数

本主题适用于:

版本

Visual Basic

C#

C++

Web Developer

学习版

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

标准版

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

专业及团队版

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

本示例演示如何调试 SQL Server 公共语言运行时 (SQL CLR) 用户定义的函数 (UDF)。 它在 AdventureWorks 示例数据库中创建了一个新的 SQL CLR 用户定义的函数。

如果在尝试调试 SQL CLR 对象时,显示消息“被用户取消”,您必须手动配置运行 Visual Studio 的计算机以及运行 SQL Server 的计算机。 有关更多信息,请参见如何:配置计算机以启用 Transact-SQL 和 SQL CLR 调试

提示

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

调试 SQL CLR 用户定义的标量函数

  1. 在一个新的 SQL CLR 项目中,建立一个到 AdventureWorks 示例数据库的连接。 有关更多信息,请参见How to: Connect to a Database

  2. 使用下面第一个示例部分中的代码创建一个新函数,并将其命名为 OrderCount.cs。 有关更多信息,请参见How to: Develop with the SQL Server Project Type

  3. 添加一个对该功能进行测试的脚本,方法是,在 SELECT 语句中包括该脚本。 在**“解决方案资源管理器”中,右击“TestScripts”目录,单击“添加测试脚本”,然后插入下面的第二个示例部分中的代码。 以 CallOrderCount.sql 名称保存文件。 右击该文件名,然后选择“设置为默认调试脚本”**。

  4. 在 OrderCount.cs 中实例化 SqlCommand 的行上放置一个断点,然后在**“调试”菜单上,单击“启动”**以对该项目进行编译、部署和单元测试。 以黄色箭头表示的指令指针出现在断点上时,说明正在调试函数。

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

    1. 使用**“调试”菜单中的“单步执行”**,单步执行到实例化 SqlCommand 的语句之后。

    2. 在**“局部变量”**窗口中,打开变量 sqlComm,该变量是一个 SqlCommand,然后检查它的成员。

    3. 单击**“调试”菜单中的“单步执行”**,单步执行函数中的一行。 注意,成员 sqlComm.CommandText 已实例化。

    4. 在文本编辑器中,将 sqlComm 拖动到**“监视”**窗口中的任意位置。 该变量随即添加到受监视的变量列表中。

    5. 再次选择**“单步执行”,注意此时将打开一个标记为“动态 T-SQL”**的新窗口,其中显示了即将执行的 SQL 语句。

    6. 选择**“单步执行”**以执行该语句并返回到函数。

    7. 再次按**“继续”,注意此时将打开第二个“动态 T-SQL”**窗口,其中显示了返回函数值的代码。

    8. 再次按**“继续”**完成函数调试。

示例

这是创建函数所需的代码。

using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
 
 
public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
    public static int OrderCount()
    {
        using (SqlConnection conn = new SqlConnection("context connection=true"))
            {
                  conn.Open();
                  SqlCommand cmd = new SqlCommand();
                  cmd.Connection = conn;
                  cmd.CommandText = "SELECT 42";
                  
                  //cmd = new SqlCommand("SELECT 42",conn);
 
                  int result = (int)cmd.ExecuteScalar();
                  return result;
            }
    }
};

这是调用此函数的测试脚本。

SELECT dbo.OrderCount()

请参见

任务

如何:通过使用公共语言运行时集成创建和运行 SQL Server 用户定义的函数