2010-10-12 72 views
1

我有一个很长的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?

你可以建议我哪个其他技巧?我无法一次运行一段代码,因为我会失去临时变量。

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

+0

如果你双击错误消息,它不会带你到问题陈述? – 2010-10-12 09:08:00

+0

啊好,我不知道这个。谢谢。 – LaBracca 2010-10-12 12:42:59

回答

2

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

+0

这个答案迷失在所有我的问题的答案。但哇!这正是我想要做的!非常感谢! – LaBracca 2010-11-22 10:51:14

0

你正在运行哪个版本的SQL服务器?

根据错误的严重程度,您可以尝试捕捉错误的另一个妙用技巧是在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分析器在您运行程序时跟踪数据库。

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

相关问题