演练:调试 Transact-SQL 用户定义的函数

本主题适用于:

Visual Studio 旗舰版

Visual Studio 高级专业版

Visual Studio 专业版

Visual Studio 速成版

ms165047.DoesApplybmp(zh-cn,VS.100).gif ms165047.DoesApplybmp(zh-cn,VS.100).gif ms165047.DoesApplybmp(zh-cn,VS.100).gif ms165047.DoesNotApplybmp(zh-cn,VS.100).gif

本示例在 AdventureWorks2008 数据库中使用名为 ufnGetStock 的现有用户定义的函数 (UDF)。此函数返回给定 ProductID 的库存数。

该示例创建多次调用 UDF 的存储过程。存储过程通过不同参数调用 UDF,因此可以跟踪该 UDF 中的不同执行路径。该示例还演示了从一个 Transact-SQL 对象(存储过程)跳转到另一个对象(函数)的过程。这些步骤与 演练:调试 Transact-SQL 存储过程 中的步骤类似。

还可以通过单步执行**“服务器资源管理器”**中的函数执行直接数据库调试。

调试用户定义的函数

  1. 在新的 SQL Server 项目中,建立一个到 AdventureWorks2008 示例数据库的连接。有关更多信息,请参见如何:使用服务器资源管理器连接到数据库

  2. 使用下面示例部分中的代码创建一个新的存储过程,并将它命名为 Test_ufnGetStock。有关更多信息,请参见如何:使用 SQL Server 数据库项目或服务器项目进行调试

  3. 在 Test_ufnGetStock 中设置断点。此操作是可选的,因为直接数据库调试会导致过程的第一行充当一个断点。

  4. 在 UDF ufnGetStock 中设置断点。

    1. 通过右击**“服务器资源管理器”中的“函数”节点,再双击“ufnGetStock”**图标,打开 UDF 的源代码。

    2. 左键单击 DECLARE 语句旁边的灰色空白处以设置断点。

  5. 单步执行存储过程。如果过程具有参数,将出现**“运行存储过程”**对话框,询问这些参数的值。在这种情况下,存储过程内的参数都已硬编码。有关更多信息,请参见如何:使用服务器资源管理器单步执行对象

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

    1. 使用 F11 键或**“单步执行”**按钮来逐句通过代码。在 SELECT 语句处,再次按 F11 键时,将单步执行 UDF。逐句通过 UDF,直到退回到存储过程后再继续。

    2. 在 UDF 中可以遵照不同的执行路径,具体取决于输入参数。可以在**“局部变量”**窗口中查看 UDF 中的变量值,或者通过将光标置于这些变量值上进行查看。

示例

这是适用于调用用户定义函数的存储过程的代码。

ALTER PROCEDURE Test_ufnGetStock 
AS
    SELECT dbo.ufnGetStock(1) as CurrentStock   -- non-zero inventory
    SELECT dbo.ufnGetStock(316) as CurrentStock -- zero inventory
    SELECT dbo.ufnGetStock(5) as CurrentStock   -- no such product

请参阅

概念

调试 Transact-SQL

其他资源

Server Explorer/Database Explorer