В наших хранимых процедурах нам нравится «возвращать» определенное возвращаемое значение после повышения и ошибки, используя raiserror ()
Для этого мы используем низкие уровни серьезности (например, 12), за которыми следуетвозвращаемое значение, например:
create or alter proc dbo.usp_test
as
begin
print '**start of proc'
raiserror( 'error on purpose',12,1);
print '**after the error'
return -3
end
Это прекрасно работает при запуске этой процедуры:
declare @RC int
exec @RC = dbo.usp_test
print concat('The return code is ', @RC)
/* output:
**start of proc
Msg 50000, Level 12, State 1, Procedure usp_test, Line 6 [Batch Start Line 12]
error on purpose
**after the error
The return code is -3
*/
Однако, когда этот proc вызывается из модульного теста, поведение неожиданно меняетсявыполнение прекращается после raiserror:
create schema T_usp_test authorization dbo;
GO
EXECUTE sp_addextendedproperty @name = 'tSQLt.TestClass', @value = 1, @level0type = 'SCHEMA', @level0name = 'T_usp_test'
GO
create or alter proc T_usp_test.[test mytest]
as
begin
exec tSQLt.ExpectException;
declare @RC int;
exec @RC = dbo.usp_test;
print concat('The return code is ', @RC)
end
GO
exec tSQLt.Run 'T_usp_test.[test mytest]'
/* output:
(1 row affected)
**start of proc
+----------------------+
|Test Execution Summary|
+----------------------+
|No|Test Case Name |Dur(ms)|Result |
+--+--------------------------+-------+-------+
|1 |[T_usp_test].[test mytest]| 7|Success|
-----------------------------------------------------------------------------
Test Case Summary: 1 test case(s) executed, 1 succeeded, 0 failed, 0 errored.
-----------------------------------------------------------------------------
*/
Итак, вопрос:
1) почему поведение отличается, и процесс теперь внезапно останавливается, выполняя в raiserror()
?
2) как я могу это преодолеть?