SQL Server Management Studio 调试

Posted 薛定谔的DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server Management Studio 调试相关的知识,希望对你有一定的参考价值。

调试器在任何开发平台中都扮演着重要的角色。调试器越强大,调试时间消耗越少。SQL Server 2012 带有强大的调试技术,可以减少您的时间和精力。但怎样进行调试呢?

首先安装 SQL Server Management Studio(SSMS),我们用一个示例来演示调试器功能。

USE AdventureWorks2014
GO
DECLARE @BusinessEntityID INT
DECLARE @PhoneNumberType VARCHAR(50)
DECLARE @FirstName VARCHAR(50)
DECLARE @SalesQuota NUMERIC(18,2)
DECLARE Database_Cursor CURSOR FOR
  Select top 5 BusinessEntityID,FirstName,SalesQuota,PhoneNumberType
  from [Sales].[vSalesPerson]
OPEN Database_Cursor
FETCH NEXT FROM Database_Cursor INTO @BusinessEntityID, @FirstName, @SalesQuota,@PhoneNumberType
WHILE @@FETCH_STATUS = 0
BEGIN
  PRINT CONCAT(@BusinessEntityID,' ', @FirstName,' ' ,@SalesQuota,' ',@PhoneNumberType)
  FETCH NEXT FROM Database_Cursor INTO @BusinessEntityID, @FirstName, @SalesQuota,@PhoneNumberType
END
CLOSE Database_Cursor
DEALLOCATE Database_Cursor
GO

1. 启用调试器:

在继续使用这些功能之前,让我告诉您如何运行调试器。 在SSMS窗口中,选择调试菜单并选择开始调试或按(Alt + F5)或直接点击调试按钮,如图所示。

2. 设置断点:

在某行SQL前的空白处点击,出现圆圈且行被选中,则表示设置完成。或者按 F9 键,则光标所在行被选中为断点行。取消选中,再重复一次即可。

3. 运行调试:

在调试模式下,当设置断点后,点击上方绿色箭头(继续)按钮或按(Alt + F5)运行下一步。底部将显示当前断点行的变量值,如图所示。

当再次点击按钮继续时,下一次操作到此断点再次暂停,变量则显示第二行值。如此反复,我们可以确定该脚本运行时,其中的某些变量是否正常、是否有异常值导致脚本运行出错。

4. 条件断点调试:

在调试的时候,若是类似这种遍历查询,将执行太久,我们是否可以设置条件,让某个值出现的时候才中止?这是可以实现的。设置断点后,我们右键断点行,选中条件选项。

我们可以设置,当遍历 @PhoneNumberType='Work' 时暂停,设置如下图。当继续执行后,只有当 @PhoneNumberType='Work'  时,变量值才显示。

类似的,我们希望当 @PhoneNumberType='Work' 且在第2次出现时才中止,这里很简单,我们再增加一个命中次数的条件,命中次数设置为2。

此外在调试窗口中,还可以逐行调试、逐个过程调试,更方便我们排查问题。这些调试概念对于开发人员再熟悉不过了,而 SQL Server 的 SQL 调试,大家似乎很少了解。我见过较多的开发同事、运维同事、甚至DBA,调试存储过程时,利用 多个 print 排查哪行 SQL 出现问题。这虽然也是个好方法,不过对于取数的异常,还得再继续操作数据。

不管黑猫白猫,抓到老鼠就是好猫。一种解决问题的方法也是好的。

以上是关于SQL Server Management Studio 调试的主要内容,如果未能解决你的问题,请参考以下文章

怎样使用SQL Server Management Studio

标题: Microsoft SQL Server Management Studio

使用 SQL Server Management Studio 连接到 SQL Server

如何在 SQL Server Management Studio 中注册 SQL Server 服务器?

SQL Server Compact Edition 和 SQL Server 2008 Management Studio

从 SQL Server 2016 到 SQL Server Management Studio 2005 的 ETL