Twój kod działa zgodnie z oczekiwaniami. Procedura nazywa się rekurencyjnie .
Jeśli nie chcesz tego, spróbuj tego:
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
Jeśli chcesz aby użyć rekurencji, musisz zdefiniować przypadek podstawowy (AKA „warunek wyjścia”), który spowoduje, że procedura składowana wyjdzie ze stosu rekurencji.