【问题标题】:how to debug a long script in management studio?如何在管理工作室中调试长脚本?
【发布时间】:2011-04-24 04:32:00
【问题描述】:

我有一个很长的 T-sql 脚本,它是一个批处理,类似于

DECLARE variables

select into temptable...

cursor...

insert...

update..

当我运行我拥有的脚本时

(1 row(s) affected)

(5 row(s) affected)

[...]

ERROR

(2 row(s) affected)

etc...

我想逐步运行脚本来识别哪个是给出错误的命令,是否可以在 Management Studio 中不使用 Visual Studio?

你还能建议我什么其他技巧?我不能一次运行一段代码,因为在这种情况下我会丢失临时变量。

注意:当然最好不要这样写脚本,但是我发现了这个,我想解决这个问题。

【问题讨论】:

  • 如果你双击错误信息,它不会带你到问题陈述吗?
  • 啊,很好,我不知道这个。谢谢。

标签: sql-server tsql debugging ssms


【解决方案1】:

在 Sql Server Management Studio 2008 中,您可以使用与 Visual Studio 非常相似的方式进行调试。只需在要调试的行上设置一个断点,然后单击调试按钮 (alt-F5)。这将从第一行开始调试。再次单击调试(播放)按钮,它将运行到您设置断点的代码行。希望这会有所帮助。

【讨论】:

  • 这个答案在我对所有问题的所有答案中都丢失了。但是哇!这正是我想要做的!非常感谢!
【解决方案2】:

您运行的是哪个版本的 SQL Server?

根据错误的严重程度,您可以尝试捕获错误的另一个巧妙技巧是将所有可疑的内容包装在 TRY / CATCH 块中。

首先像这样创建一个表...

CREATE TABLE [dbo].[ERROR_LOGGING](
            [ErrorNumber] [int] NULL,
            [ErrorSeverity] [int] NULL,
            [ErrorState] [int] NULL,
            [ErrorProcedure] [nvarchar](128) NULL,
            [ErrorLine] [int] NULL,
            [ErrorMessage] [nvarchar](4000) NULL,
            [UpdateStamp] [datetime] NULL DEFAULT ( getdate() )
)  ON [PRIMARY]

然后将您的代码放入 try / catch 块中。

BEGIN TRY

--Code---

END TRY


BEGIN CATCH

INSERT INTO ERROR_LOGGING (
                                            errornumber, 
                                            errorseverity, 
                                            errorstate, 
                                            errorprocedure, 
                                            errorline, 
                                            errormessage,
                                            updatestamp)
                            VALUES ( 
                                            ERROR_NUMBER(), 
                                            ERROR_SEVERITY(), 
                                            ERROR_STATE(), 
                                            ERROR_PROCEDURE(), 
                                            ERROR_LINE(), 
                                            ERROR_MESSAGE(),
                                            getdate()) 

END CATCH;

这将捕获任何严重级别超过 16 的错误并将它们插入到第一步创建的表中。

需要注意的是,try / catch 块不会捕获低级错误。

我已经多次看到源表或目标表中的数据与预期不同,即奇怪的字符、文本而不是整数等。如果您仍然无法破解它,请运行 sql server profiler trace在运行过程时针对数据库。

找到问题应该不会花很长时间。我不会介绍如何使用 SQL Server Profiler,因为您只需要进行快速网络搜索即可找到数百个详细指南。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多