调试您的存储过程






4.42/5 (25投票s)
本文将帮助您了解如何调试存储过程。
引言
我们可以使用调试菜单中的调试器轻松调试我们的 .NET 应用程序。.NET 应用程序有自己的 .PDB(程序调试数据库)文件,用于存储调试位置并递增调试配置的链接。 这些都是关于 .NET 的,但是我们可以调试存储过程吗? 答案是肯定的,我们可以调试我们的存储过程。 让我们找出如何做到这一点。
背景
存储过程因其增强的安全性、数据功能和应用程序的分离、改进的性能(因为对数据库的调用较少)等特性而广受欢迎,基本上它是一种一次性和一个地方的处理主题。SP(存储过程)现在在 DBA 和开发人员群体中更受欢迎,但是在编写大型 SP 后,如何调试它们? 如果它们运行正常,如何测试它们。
因此,这里需要调试存储过程,让我们看看我们需要什么来调试它。
一点一点地
1. 第一步是创建一个存储过程(如果您已经创建了存储过程,则可以跳过此步骤),这里我正在创建一个简单的存储过程,它从 EMP 表中选择特定 ID 的记录,请参阅下面的快照
2. 成功创建存储过程后,我们就可以调试它了。 基本上,有几种方法可以调试存储过程
- 使用 SQL Management Studio (SSMS)
- 使用 Visual Studio
我们将看到如何使用 **SQL Management Studio** 调试它(我使用的是 SQL 2008R2 Express)
- 打开 SQL 2008 R2
- 单击 ViewMenu --> 对象资源管理器
- 单击连接数据库引擎 --> 输入 SQL 数据库的用户名和密码 --> 连接到数据库,请参阅下面的代码段
- 展开数据库 --> 选择可编程性文件夹 --> 存储过程(您将在此处看到您的过程)
- 通过右键单击数据库并单击“新建查询”打开新建查询窗口
- 编写语句“Exec ProcedureName”(在我的例子中,过程名称为“sp_empInfo”)
- 使用键 F9 在该行上放置调试器
- 从 SQL 中选择绿色箭头(调试),您的调试器将启动,按 F11 进入过程
- 您可以在“本地”和“调用堆栈”窗口中查看输出
使用 **Visual Studio** 调试它
您可以使用 Visual Studio 以相同的方式调试存储过程
- 转到 Visual Studio 并连接数据库。 按照以下步骤操作
- 打开 Visual Studio 编辑器
- 单击 ViewMenu --> SQL Server 对象资源管理器(在 VS 2012 之前它是服务器资源管理器)
- 在 SQL Server 对象资源管理器窗格中,右键单击数据连接
- 选择添加连接
- 输入凭据(例如 SQL 实例、SQL 服务器用户名、密码、数据库名称)
- 右键单击数据库并允许“应用程序调试”和“允许 SQL/CLR 调试”,请参阅下面的快照
- 展开数据库 --> 选择可编程性文件夹 --> 存储过程
- 右键单击过程 --> 选择“调试过程”
您现在可以开始调试了。
异常
访问权限是在调试存储过程时遇到的最大问题,
常见错误消息
以下是在调试存储过程期间发生的常见错误消息
- 无法启动 Transact-SQL 调试器,无法连接到数据库引擎实例...
- 无法启动 T-SQL 调试,无法连接到计算机...
- 登录失败:用户名未知或密码错误...
- 启动调试器失败,执行权限是...
- 无法附加到 SQL Server 进程...
请参阅下面的一些异常/错误快照
当您尝试调试远程存储过程时,会发生以下异常
调试时避免错误的常见要点
要解决上述错误,您可以尝试以下解决方法
- 如果您在本地 SQL Server 上调试存储过程,则您的本地 SQL 用户应具有“**sysadmin**”角色,要将用户添加到 sysadmin 角色,请运行以下存储过程(它是内置的),请参阅以下语法
-
sp_addsrvrolemember '<Login>', 'sysadmin'
- 在 Windows 防火墙中配置 TCP 端口以启用 T-SQL 调试,有关详细信息,请参阅 MSDN 链接
- 在 Windows 防火墙中配置 TCP 端口以启用远程 T-SQL 调试(当 SQL Server 不同并且想要从客户端计算机对其进行调试时),请参阅 MSDN 链接,对于任何一种情况下的远程调试,您都可以使用 Windows 本地或域帐户身份验证
- 在 SQLserver 机器以及客户端上打开防火墙端口,端口:TCP 139、TCP 445、UDP 137 和 UDP 138
- SQL Management Studio 应该使用“以管理员身份运行...”启动
- Management Studio(客户端计算机)和服务器(SQL)应该在同一域中,否则您需要使用相同的用户名和密码设置帐户
我们学到了什么!
我们可以使用 Visual Studio 或 SSMS(SQL Management Studio)调试存储过程,我们可以为此使用局部变量、调用堆栈窗口。 您可以向存储过程提供参数(如果有)并获得即时调试器。
希望它在日常 .NET/SQL 生活中有所帮助。
感谢您
- Prasad