gpt4 book ai didi

.net - 在 Visual Studio 2005 中调试存储过程时的即时窗口

转载 作者:行者123 更新时间:2023-12-01 02:59:58 25 4
gpt4 key购买 nike

调试存储的 sproc 可能会带来威胁,而且我无法像我想象的那样使用即时窗口。

在 VS 2005 中调试存储过程时,即时窗口是否可用?

有没有其他方法可以对我在 Stored Proc 中创建的临时表运行查询?由于临时表的范围仅在您定义的存储过程中。

我可以在调试 TSQL 存储过程时创建一个调试器可视化工具来查询表吗

PS :我知道有更好的方法来构建您的应用程序,这样您就不必遇到这种情况,但我正在查看一些遗留代码,所以请多多包涵;)

最佳答案

我认为我从未听说过任何可以让您像调试“真实”应用程序代码那样调试 SQL 存储过程的东西。 (这涵盖了 7.0、2000 和 2005 年,但陪审团仍在 2008 年)。

当我必须对不熟悉的存储过程进行认真调试时(可能是我的,在我编写它们几个月后),我将代码剪切并粘贴到 SSMS 查询窗口,用适当的 DECLARE 和 SET 替换参数,注释掉有问题的语句(返回),并运行它。在大多数情况下,临时表(# temp 表,而不是 @table 变量)在运行后仍然存在。在 # 上搜索和替换 ## 使它们成为全局并可从其他查询窗口访问,这会有所帮助。注释掉代码块并运行未注释的部分可能非常有用。

我为严重丑陋的程序(数百甚至数千行代码)所做的一些其他技巧:

添加参数@Debug,默认为0。在过程的相关部分,添加“IF @Debug = 1” block ,在其中可以打印出当前变量值和/或临时表内容。一个有用的形式可以是:

SELECT 'DebugBlock3' DataSet, * from #MyTempTable

在此基础上,另一个技巧是定义 #Temp 表,如下所示:
IF @Debug = 0 or object_id('tempdb.dbo.#MyTempTable') is null
CREATE TABLE #MyTempTable
(
ProductId int not null
,etc
)

有了这个,如果您首先在查询窗口中创建#Temp 表,然后从同一窗口调用带有@Debug = 1 的过程,一旦过程完成,临时表仍将存在,填充任何最终内容是。

使用动态代码时(不寒而栗),我总是将@Debug 设置为使用值 0、1 和 2,并带有注释
--  Debug control:  0=do the work, 2=List out dynamic code, 1=Both

以及随后的代码块,例如:
IF @Debug > 0
BEGIN
PRINT 'Comment about the following chunk of text'
PRINT '-----------------------------------------------------------'
PRINT @Command
END
IF @Debug < 2
EXECUTE (@Command)

是的,这很痛苦,也不是特别方便,但这是我随着时间的推移想出的。老实说,我不认为你可以在 SQL 中进行认真的调试,因为测试当前状态、检查表内容以及在单步执行代码时通常会四处寻找,如果其他人在同时——而且我讨厌在我负责的任何制作中发生这种情况的可能性很小。

关于.net - 在 Visual Studio 2005 中调试存储过程时的即时窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1131083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com