как отладить длинный скрипт в студии управления? - PullRequest
1 голос
/ 12 октября 2010

У меня очень длинный 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?

Какой еще трюк ты можешь мне предложить? Я не могу запустить блок кода за раз, потому что в этом случае я потеряю временные переменные.

Примечание: Конечно, лучше не писать сценарии таким образом, но я нашел это и хотел бы решить проблему.

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

В Sql Server Management Studio 2008 вы можете выполнять отладку очень похоже на Visual Studio. Просто установите точку останова на строке, которую вы хотите отладить, а затем нажмите кнопку отладки (alt-F5). Это начнет отладку с первой строки. нажмите кнопку отладки (воспроизведения) еще раз, и она перейдет к строке кода, где вы установите точку останова. Надеюсь, это поможет.

0 голосов
/ 12 октября 2010

Какую версию 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 Profiler для базы данных во время выполнения процедуры.

Это не должнодолго, чтобы найти проблему.Я не буду вдаваться в то, как использовать SQL Server Profiler, так как вам нужно всего лишь выполнить быстрый веб-поиск, чтобы найти сотни подробных руководств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...