Отладка SQL Server - выделенная строка не соответствует выполняемой строке - PullRequest
1 голос
/ 19 апреля 2011

У меня есть сценарий SQL cmd, который выглядит следующим образом:

:setvar DatabaseName testDb
:On Error Exit
--break point on next line
Declare @DBName varchar(255), @DBPath varchar(255), @LogName varchar(255), @LogPath varchar(255) 
IF EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$(DatabaseName)')
BEGIN
USE [$(DatabaseName)];
select @DBName = name, @DBPath = physical_name from sys.database_files where type_desc = 'ROWS'
select @LogName = name , @LogPath = physical_name from sys.database_files where type_desc = 'LOG'
END

Print @dbname
Print @dbpath

Когда я пытаюсь отладить вышеуказанный сценарий в SQL Server Management Studio, строка, которая выделяется как строка, выполняемая в данный момент, кажется, не тот, который выполняет.И основываясь на просмотре локального окна и когда установлен @dbName, отладчик кажется отключенным на 4 строки (когда выделенная строка является строкой объявления, @dbname устанавливается со значением из базы данных).

Интересно, если это потому, что отладчик пропускает мои setvar операторы.Также есть ли обходной путь.Очень сложно отлаживать большой скрипт, когда текущая строка не является текущей строкой !!!

1 Ответ

1 голос
/ 19 апреля 2011

Это может быть где-то, где LINENO пригодится. Когда я использую LINENO, а затем дважды нажимаю на сообщение об ошибке, SSMS переводит меня в нужное место.

:setvar DatabaseName testDb
:On Error Exit
LINENO 3
--break point on next line
Declare @DBName varchar(255), @DBPath varchar(255), @LogName varchar(255), @LogPath varchar(255) 
IF EXISTS (SELECT 1 FROM [master].[dbo].[sysdatabases] WHERE [name] = N'$(DatabaseName)')
BEGIN
    USE [$(DatabaseName)];
    select @DBName = name, @DBPath = physical_name from sys.database_files where type_desc = 'ROWS'
    select @LogName = name , @LogPath = physical_name from sys.database_files where type_desc = 'LOG'
END

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