调试存储过程时如何执行sql查询

Posted

技术标签:

【中文标题】调试存储过程时如何执行sql查询【英文标题】:How to execute sql query when debugging a stored procedure 【发布时间】:2015-11-20 12:48:04 【问题描述】:

我正在 SQL Server 2008 上调试一个存储过程,我有这个:

INSERT INTO #tempTable (ID, Name)
  SELECT ID, Name FROM dbo.MYTABLE WHERE dbo.MYTABLE.Old >= 15

如何在调试时将数据查看到#tempTable 中?

【问题讨论】:

查询临时数据库并找到您的表,但它会更改名称,类似于 tempTable00000001 通常使用 select 语句。为什么? 指定你想要实现什么,你的存储过程将数据插入到临时表中,你想从另一个会话中看到它?如果不是在此之后添加简单的SELECT * FROM #tempTable,则更改程序并继续,调试后注释或删除它。 【参考方案1】:

在 SQL Server Management Studio 中,你不能在调试存储过程时直接执行查询,这仍然没有实现(我认为)。您只能在本地调试窗口中查看局部变量值。

在调试模式下查看临时表值有一些变通方法:-

1) 在存储过程中,在#temptable中插入数据后,添加这行代码来获取xml表变量中要查看临时值的临时值。然后你可以在本地调试窗口中检查xml格式的值

  --inserting data into temp table
  INSERT INTO #tempTable (ID, Name)
  SELECT ID, Name FROM dbo.MYTABLE WHERE dbo.MYTABLE.Old >= 15

  --to see records of temp table
  DECLARE @temptable XML 
  SET @temptable = (SELECT * FROM #@temptable FOR XML AUTO)

2)您可以将本地临时表(#temptable)转换为全局临时表(##temptable),因此当您在临时表中插入日期时,您可以打开新的查询窗口,并且可以使用查看全局临时表记录选择查询。

【讨论】:

【参考方案2】:

这篇博文描述了如何从另一个会话访问临时表: http://web.archive.org/web/20180409190701/http://sqlblog.com:80/blogs/paul_white/archive/2010/08/14/viewing-another-session-s-temporary-table.aspx

或者,您可以在表名中使用两个##,以使该表可以从其他会话全局访问:##tempTable(在您的插入运行时,该表可能被锁定以供读取)

【讨论】:

【参考方案3】:

虽然 SQL Server Management Studio 有一些调试功能,但我觉得它们没什么用。

我认为没有任何针对 SQL Server 的调试工具,例如 Visual Studio,它会在运行时为您提供分步信息。

通常开发人员调试 sql server 代码的方式是使用 print 语句,对于存储过程,将 sp 定义取出来为过程期望的每个参数声明一个变量,硬编码变量的值并执行较小的逻辑代码块以查看是什么去哪里。

【讨论】:

以上是关于调试存储过程时如何执行sql查询的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver存储过程怎么调试

PL/SQL如何调试sql语句存储过程

在 SQL Server 2016 中调试一个关于存储过程执行的奇怪场景

oracle10g的存储过程大概怎么调试

MYSQL存储过程调试过程

存储过程系列之调试存储过程 SQL Server 2005