2010-10-12 57 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,因爲您只需要進行快速的網絡搜索即可找到數百個詳細指南。

相關問題