演练:调试 Transact-SQL 触发器

本主题适用于:

Visual Studio 旗舰版

Visual Studio 高级专业版

Visual Studio 专业版

Visual Studio 速成版

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

若要调试触发器,则在会导致触发器激发的存储过程中设置断点,在触发器中设置断点,然后按演练:调试 Transact-SQL 存储过程中的说明继续操作。

本示例使用 AdventureWorks2008 数据库,该数据库具有带有 DELETE 触发器的 Purschasing.Vendor 表。该示例包括一个删除表中某行的存储过程,进而导致触发器激发。在触发器中设置断点,并使用不同参数来执行该存储过程,以便跟踪触发器中的不同执行路径。

提示

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

调试 SQL 触发器

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

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

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

  4. 设置触发器的断点。

    1. 通过右击**“表”节点打开触发器源代码,接着右击“Purchasing.Vendor”表的节点,再双击名为“dVendor”**的触发器的图标。

    2. 左键单击 SET NOCOUNT ON 语句旁边的灰色空白处以设置触发器中的断点。此步骤是必需的:如果未在触发器中设置断点,则会在尝试单步执行该触发器时跳过其代码。

  5. 单步执行存储过程。有关更多信息,请参见如何:使用服务器资源管理器单步执行对象

    将出现**“运行存储过程”**对话框,询问参数值。

  6. 设置下列参数值:

    @entityID = 1492

    指令指针的黄色箭头出现在 SET NOCOUNT ON 行,即存储过程中代码的第一个可执行行。

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

    1. 使用 F11 键或**“单步执行”**按钮来逐句通过代码。

      在 DELETE 语句处,再次按 F11 键时,将单步执行触发器。

    2. 逐句通过触发器,直到退回到存储过程后再持续到最后。

示例

这是导致触发器激发的存储过程的代码。

ALTER PROCEDURE dbo.DeleteVendor
    (
        @entityID       int
    )
AS
    SET NOCOUNT ON
    DELETE Purchasing.Vendor
    WHERE BusinessEntityID = @entityID 
    RETURN

请参阅

概念

调试 Transact-SQL

其他资源

Server Explorer/Database Explorer