Эквивалент Debug.Assert для SQL Server - PullRequest
5 голосов
/ 08 июля 2010

Я адаптирую большое количество сценариев SQL Server 2005 для объединения двух наших баз данных. Сценарии запускаются из файла .cmd, который вызывает sqlcmd для запуска сценариев по порядку. Однако у меня возникла одна или две проблемы, из-за которых скрипты не работают.

Я бы хотел быстро взглянуть на состояние некоторых сценариев, где они работают неправильно - проверить значения переменных, результаты некоторых запросов и тому подобное.

Если бы у меня возникла эта проблема со сборкой .NET, я бы добавил код в Debug.Assert или установил точки останова, где я знал, что произойдут сбои, что приостановит выполнение программы и позволит мне проверять значения переменных .

Мне было интересно, есть ли эквивалент в SQL Server 2005?

Ответы [ 3 ]

7 голосов
/ 08 июля 2010

Мне никогда не удавалось заставить интегрированную отладку работать с SQL Server - я обычно прибегаю к отладке "printf", используя операторы PRINT или RAISERROR .RAISERROR может выполнить базовое форматирование аргумента, чтобы выложить значения в окно сообщений.Например, если у вас есть параметр @ Val1 типа int, вы можете сделать:

RAISERROR('Val1 = %i',10,1,@Val1) WITH NOWAIT

(опция WITH NOWAIT заставляет сообщение появляться немедленно, а не обычное поведение SQL буферизации сообщений / выходов)

1 голос
/ 26 февраля 2017

Это будет работать:

-- Assert procedure equivalent to other languages.
-- raiserror() will cause sql execution to stop and throw execep in C# code that is running this statement.
-- Usage:
-- declare @shouldBeTrue bit
-- set @shouldBeTrue = case when 1=0 then 1 else 0 end
-- exec _AT3Assert @shouldBeTrue, 'failed'
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = '_AT3Assert' AND ROUTINE_SCHEMA = 'dbo' AND ROUTINE_TYPE = 'PROCEDURE')
 EXEC ('DROP PROCEDURE dbo._AT3Assert')
 GO
create procedure dbo._AT3Assert
    @shouldBeTrue bit,      
    @errorMsg nvarchar (max)
AS
    SET NOCOUNT ON;
    if @shouldBeTrue is null or @shouldBeTrue <> 1
    begin
        raiserror (@errorMsg, -- Message text.
               11, -- Severity.
               1 -- State.
               );
    end
GO
0 голосов
/ 08 июля 2010

Я использую командные файлы и проверяю код ошибки следующим образом: -

SQLCMD.EXE -b -l 30 -E -S <SERVER> -i "<SQLFILE>.sql">>"%LOG_FILE%"2>&1

IF ERRORLEVEL 1 (
    ECHO. Failed.
) ELSE (
    ECHO. Succeeded.
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...