演练:调试 T-SQL 用户定义的函数
更新:2007 年 11 月
本主题适用于:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
速成版 |
||||
标准版 |
||||
专业团队版 |
表格图例:
适用 |
|
不适用 |
|
默认情况下隐藏的一条或多条命令。 |
此示例在 AdventureWorks 数据库中使用一个现有的名为 ufnGetStock 的用户定义函数 (UDF)。该函数针对给定的 ProductID 返回存货的项数。
该示例创建调用几次该 UDF 的存储过程。该存储过程用不同的参数调用该 UDF,以便可以沿不同的执行路径通过该 UDF。此示例还阐释如何从一个 T-SQL 对象(存储过程)跳转到另一个 T-SQL 对象(函数)。这些步骤类似于 演练:调试 T-SQL 存储过程 中介绍的步骤。
在“服务器资源管理器”中还可以通过单步执行函数来执行直接数据库调试。
调试用户定义的函数
在一个新的 SQL Server 项目中,建立一个到 AdventureWorks 示例数据库的连接。有关更多信息,请参见如何:连接到数据库。
使用下面示例部分中的代码创建一个新的存储过程,并将其命名为“Test_ufnGetStock”。有关更多信息,请参见 如何:使用 SQL Server 项目类型进行开发。
在“Test_ufnGetStock”中设置断点。这是可选步骤,因为直接数据库调试使过程的第一行代码的行为类似于设置了断点。
在 UDF ufnGetStock 中设置断点。
通过在“服务器资源管理器”中右击“函数”节点,然后双击“ufnGetStock”图标,打开该 UDF 的源代码。
用左键单击 DECLARE 语句旁边的灰色空白以设置断点。
单步执行该存储过程。如果此过程有参数,则会出现“运行存储过程”对话框,并要求输入参数值。在这种情况下,所有参数都在存储过程内部经过硬编码。有关更多信息,请参见 如何:使用服务器资源管理器单步执行对象。
尝试不同的调试功能。
使用 F11 键或“逐语句”按钮逐句通过代码。在 SELECT 语句处,如果再次按 F11,则将进入并单步执行 UDF。逐句通过该 UDF,直到退出该函数回到存储过程,然后继续调试。
根据输入参数的不同,您可以观察到该 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