Вашият код се държи според очакванията. Процедурата се самоизвиква рекурсивно .
Ако не се искате това, опитайте това:
ALTER PROCEDURE dbo.Test
@Value int = null
AS
BEGIN
IF (IsNull(@Value, '') = '')
SELECT 'I am NULL!'
ELSE
SELECT 'I am ' + CONVERT(varchar(20), @Value)
END
GO
EXEC dbo.Test
Ако искате за да използвате рекурсия, трябва да дефинирате основен случай (известен още като „условие за изход“), което ще накара съхранената процедура да излезе от стека за рекурсия.